使用 xslt 按升序对 xsd 格式的 XML 进行排序
Posted
技术标签:
【中文标题】使用 xslt 按升序对 xsd 格式的 XML 进行排序【英文标题】:Sorting a XML with xsd format in ascending order using xslt 【发布时间】:2020-11-12 18:29:00 【问题描述】:以xsd格式对XML进行升序排序
由于 XML 中的 xsd 格式,我的 xslt 解决方案无法正常工作。 xsd的情况下必须使用什么?
这是我的 XML 输入:
<?XML version="1.0" encoding="utf-8"?>
<test xmlns="tempuri.org/Test.xsd">
<customer>
<number>
4
</number>
<number>
1
</number>
<number>
7
</number>
</customer>
</test>
我尝试了什么:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="w3.org/1999/XSL/Transform">
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="number"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
我期望的输出:
<?XML version="1.0" encoding="utf-8"?>
<test xmlns="tempuri.org/Test.xsd">
<customer>
<number>
1
</number>
<number>
4
</number>
<number>
7
</number>
</customer>
</test>
【问题讨论】:
您混淆了 XSD 和命名空间。请参阅:***.com/questions/34758492/… 【参考方案1】:您的 XML 应该是(标题中的大写导致问题):
<?xml version="1.0" encoding="UTF-8"?>
<test>
<customer>
<number>4</number>
<number>1</number>
<number>7</number>
</customer>
</test>
sort 属性的 xpath 来自 select 的上下文。即,您正在选择
这个 xsl 做你想做的事:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" />
<xsl:template match="/">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="customer">
<xsl:copy>
<xsl:apply-templates select="@*|node()">
<xsl:sort select="text()"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
如果你想包含你的 xsd
<?xml version="1.0" encoding="utf-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="tempuri.org/Test.xsd"">
-然后确保 xsd 文件存在于您所说的位置。
【讨论】:
您混淆了 XSD 和命名空间。 问题中的声明是。我的 xml 解析器对声明中的大写字母不满意。以上是关于使用 xslt 按升序对 xsd 格式的 XML 进行排序的主要内容,如果未能解决你的问题,请参考以下文章
根据 XSD 兼容 XML 输入 -> XSD 兼容 XML 输出的 1:1 映射从 XSD 生成 XSLT 文件