繁体   English   中英

在XSLT 2.0中对元素进行排序

[英]Sorting elements in XSLT 2.0

我试图使用XSLT对以下XML进行排序

<Name>name3</Name>
<Job>x</Job> 
<Name>name1</Name>
<Job>y</Job> 
<Name>name2</Name>

预期的产出是

<Name>name1</Name>
<Job>x</Job> 
<Name>name2</Name>
<Job>y</Job> 
<Name>name3</Name>

必须对Name元素进行排序,同时保持Job元素不变。 我正在使用XSLT 2.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>

我是XSLT的新手。 对不起,如果这是一个非常简单的问题。 提前致谢。

对不起,如果这是一个非常简单的问题。

不,这一点都不简单。 试试这种方式:

XSLT 2.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输入,具有单个根元素。

演示: http//xsltransform.net/94hvTzG/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM