我不确定xsl:sort指令是如何工作的.我需要通过标签名称(对于diffing)对元素进行排序,我似乎无法想出如何使其工作.我的第一个虽然是修改身份转换,只是修改它来包括排序语句,但我不完全确定如何做到这一点.
- <xsl:template match="@*|node()">
- <xsl:copy>
- <xsl:apply-templates select="@*|node()">
- <!-- xsl:sort ? -->
- </xsl:apply-templates>
- </xsl:copy>
- </xsl:template>
这种转变:
- <xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
- <xsl:output omit-xml-declaration="yes" indent="yes"/>
- <xsl:strip-space elements="*"/>
- <xsl:template match="node()|@*">
- <xsl:copy>
- <xsl:apply-templates select="@*">
- <xsl:sort select="name()"/>
- </xsl:apply-templates>
- <xsl:apply-templates select="node()">
- <xsl:sort select="name()"/>
- </xsl:apply-templates>
- </xsl:copy>
- </xsl:template>
- </xsl:stylesheet>
当应用于此XML文档时:
- <t b="x" c="y" a="t">
- <c/>
- <b/>
- <a/>
- </t>
产生所需的排序输出:
- <t a="t" b="x" c="y">
- <a></a>
- <b></b>
- <c></c>
- </t>
注意:
>不仅元素而且属性都被排序(后者是依赖于实现的,但可以使用MSXML).>对于差异使用排序的XML是不可靠的,因为将XML文档转换为排序表示不是1:1映射.