我想排序两个xml文件,以便将它们与winmerge进行比较,但是当我设法排序节点时我遇到了一个问题,但是我还需要使用一样的名字。在xml中使用xslt多重排序
这里是我的xml:
<node>
<location>A</location>
<title>folder in A</title>
<acl group="group_4" permissions="111111111"/>
<acl group="group_2" permissions="110000000"/>
<acl group="group_3" permissions="110000000"/>
<acl group="group_1" permissions="110000000"/>
</node>
<node>
<location>A</location>
<title>Another folder in A</title>
<acl group="group_1" permissions="110000000"/>
<acl group="group_3" permissions="111111111"/>
<acl group="group_2" permissions="110000000"/>
</node>
我的XSL是这样的:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match="/">
<xsl:for-each select="import/node">
<xsl:sort select="location" data-type="text" order="ascending"/>
<xsl:sort select="title[not(@clear)]" data-type="text" order="ascending"/>
<xsl:sort select="@group" data-type="text" order="ascending"/>
<node>
<xsl:copy-of select="location"/>
<xsl:copy-of select="title[not(@clear)]"/>
<xsl:copy-of select="acl[not(@basegroup) and not(@baseowner) and not(@standard)]"/>
</node>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
,我已经得到了这样的结果:不是这一个
<node>
<location>A</location>
<title>Another folder in A</title>
<acl group="group_1" permissions="110000000"/>
<acl group="group_3" permissions="111111111"/>
<acl group="group_2" permissions="110000000"/>
</node>
<node>
<location>A</location>
<title>folder in A</title>
<acl group="group_4" permissions="111111111"/>
<acl group="group_2" permissions="110000000"/>
<acl group="group_3" permissions="110000000"/>
<acl group="group_1" permissions="110000000"/>
</node>
:
<node>
<location>A</location>
<title>Another folder in A</title>
<acl group="group_1" permissions="110000000"/>
<acl group="group_2" permissions="110000000"/>
<acl group="group_3" permissions="111111111"/>
</node>
<node>
<location>A</location>
<title>folder in A</title>
<acl group="group_1" permissions="110000000"/>
<acl group="group_2" permissions="110000000"/>
<acl group="group_3" permissions="110000000"/>
<acl group="group_4" permissions="111111111"/>
</node>
我已经检查到类似的帖子,但没有任何工作。提前致谢。最好的祝福。
你举的例子是不明确的。看来你想通过'location'和'title'对'node'元素进行排序,然后在每个节点**内对**元素进行排序,并通过'group'属性对'act'元素进行排序。你实际上做的是试图通过它们没有的'group'属性对'node'元素进行排序。 –
你好迈克尔,你是对的,我尝试按位置和标题排序节点元素,然后在每个节点中排序acl属性。为了做到这一点,我需要创建一个临时组吗? –