我是XSLT的新手。我想出了一个问题,希望有人可以提供帮助。
假设我有一个源xml,
<?xml version="1.0"?>
<docroot>
<vc6>foo</vc6>
<vc7>bar7</vc7>
<vc8 arch="x64">amd64demo</vc8>
<vc7>foo7</vc7>
<vc6>bar</vc6>
</docroot>
我想把它变成:
<?xml version="1.0"?>
<docroot>
<vc6>bar</vc6>
<vc6>foo</vc6>
<vc7>bar7</vc7>
<vc7>foo7</vc7>
<vc8 arch="x64">amd64demo</vc8>
</docroot>
即, 1.子元素应按元素名称排序,所以之前是。 2.如果两个孩子具有相同的元素名称,则应按文本值排序,因此“bar”位于“foo”之前。
如何编写xsl?谢谢。
答案 0 :(得分:3)
修改legoscia的答案:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()">
<xsl:sort select="name()" />
<xsl:sort select="." />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
答案 1 :(得分:1)
有一些如何在this answer中使用xsl:sort
的示例。这样的事情对你有用:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="node()">
<xsl:sort select="name()" />
<xsl:sort select="." />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>