如何在XML文件的节点内对一组元素进行排序。
这是我的输入
<Root>
<Level_1.1>...</Level_1.1>
<Level_1.2>...</Level_1.2>
<Level_1.3>
<Sub.1>...</Sub.1>
<Sub.2>
<S.1>1</S.1>
<S.3>Something</S.3>
<S.6>C</S.6>
<S.2/>
<S.4>
<AA.1>2</AA.1>
</S.4>
<S.5/>
</Sub.2>
<Sub.3>...</Sub.3>
</Level_1.3>
<Level_1.4>...</Level_1.4>
</Root>
希望输出到与下面相同的层次结构位置。
<Root>
<Level_1.1>...</Level_1.1>
<Level_1.2>...</Level_1.2>
<Level_1.3>
<Sub.2>
<S.1>1</S.1>
<S.2/>
<S.3>Something</S.3>
<S.4><AA.1>2</AA.1></S.4>
<S.5/>
<S.6>C</S.6>
</Sub.2>
<Sub.3>...</Sub.3>
</Level_1.3>
<Level_1.4>...</Level_1.4>
</Root>
这是我尝试过的其他建议,但它没有用。
<xsl:template match="/Root/Level_1.3">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="Sub.2" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
答案 0 :(得分:0)
以这种方式试试吗?
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Sub.2">
<xsl:copy>
<xsl:apply-templates>
<xsl:sort select="name()" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>