【发布时间】:2018-08-08 16:01:07
【问题描述】:
我有这个 XML
<root xmlns:temp ="temp.com">
<testNode name="a">
<sample/>
</testNode>
<testNode name="b">
<sample/>
</testNode>
<testNode name="c">
<sample/>
</testNode>
<testNode name="d">
<sample/>
</testNode>
<testNode name="b">
<sample/>
</testNode>
</root>
我想编写一个转换复制所有内容,同时按 name 属性的值对 testNodes 进行排序。
预期的输出是:
<root xmlns:temp ="temp.com">
<testNode name="a">
<sample/>
</testNode>
<testNode name="b">
<sample/>
</testNode>
<testNode name="b">
<sample/>
</testNode>
<testNode name="c">
<sample/>
</testNode>
<testNode name="d">
<sample/>
</testNode>
</root>
命名空间可能让我失望,但我似乎无法对结果进行排序。
到目前为止我尝试过的 XSLT 是:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:temp="temp.com"
>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()">
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template name="temp:root">
<xsl:copy>
<xsl:apply-templates select="temp:testNode">
<xsl:sort select="@name"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
您可以编辑您的问题以显示您尝试过的 XSLT 吗?此外,您提到了名称空间,但您在 XML 中声明的名称空间前缀实际上并未在任何地方使用。您的 XML 是否准确(即它真的是
<temp:testNode>而不仅仅是<testNode>吗?谢谢! -
这只是示例代码,其格式与我实际需要转换的格式相似。
-
重要的是显示一个代表性输入文档,即一个实际上导致您描述的问题的输入文档。请编辑问题。
-
这个样本格式相同,完美代表我的问题