Xml XSLT2.0中的元素排序
我正在尝试使用XSLT对以下XML进行排序Xml XSLT2.0中的元素排序,xml,sorting,xslt,xslt-2.0,Xml,Sorting,Xslt,Xslt 2.0,我正在尝试使用XSLT对以下XML进行排序 <Name>name3</Name> <Job>x</Job> <Name>name1</Name> <Job>y</Job> <Name>name2</Name> name3 x 名称1 Y 姓名2 预期产量为 <Name>name1</Name> <Job>x</Job>
<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>
name3
x
名称1
Y
姓名2
预期产量为
<Name>name1</Name>
<Job>x</Job>
<Name>name2</Name>
<Job>y</Job>
<Name>name3</Name>
name1
x
姓名2
Y
名字3
必须对名称元素进行排序,同时保持作业元素的完整性。
我正在使用XSLT2.0
尽管我能够使用中给出的xsl:sort对Name元素进行正确排序,但我得到的输出如下:
<Name>name1</Name>
<Name>name2</Name>
<Name>name3</Name>
<Name>name3</Name>
<Job>x</Job>
<Name>name1</Name>
<Job>y</Job>
<Name>name2</Name>
name1
姓名2
名字3
名字3
x
名称1
Y
姓名2
我是XSLT新手。对不起,如果这是一个非常简单的问题。
提前谢谢
对不起,如果这是一个非常简单的问题
不,这一点都不简单。试着这样做:
XSLT2.0
<xsl:stylesheet version="2.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="*"/>
<xsl:variable name="sorted-names">
<xsl:perform-sort select="/root/Name">
<xsl:sort select="."/>
</xsl:perform-sort>
</xsl:variable>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Name">
<xsl:copy-of select="$sorted-names/Name[count(current()/preceding-sibling::Name) + 1]"/>
</xsl:template>
</xsl:stylesheet>
注意,这假设一个格式良好的XML输入,只有一个根元素
演示:此部分不清楚:“同时保持作业元素完整”。请更改示例并为每个作业指定不同的值(或唯一id),这样我们就可以知道哪个是哪个。我已经更新了这个例子。如果你不告诉我们你做了什么,我们就不能告诉你你做错了什么。对于排序,你可以使用
执行排序
,而不是每个@MartinHonnen的,这有什么好处吗?你可以节省一行代码,并且可以利用XSLT 2.0的特性排序一个序列。@MartinHonnen“你会保存一行代码”啊,你说得对。我已经编辑了我的答案,谢谢。@michael.hor257k非常感谢!