XSL仅在一个节点上排序

时间:2011-07-13 20:15:42

标签: xml xslt

我正在使用以下XSLT,但排序后节点的顺序对我来说有点问题,因为它们没有遵循与输入相同的顺序。

enter code here

    

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="Types">
            <xsl:sort select="Type1"/>
        </xsl:apply-templates>
        <xsl:apply-templates select="SecondTypes">
            <xsl:sort select="Type1"/>
        </xsl:apply-templates>        
        <xsl:apply-templates select="ServiceOption">
            <xsl:sort select="Issue"/>
        </xsl:apply-templates>    
        <xsl:apply-templates select="ServiceConcession">
            <xsl:sort select="Concession" data-type="number"/>
        </xsl:apply-templates>                                
        <xsl:apply-templates select="node()[not(self::Types|self::SecondTypes|self::ServiceOption|self::ServiceConcession)]|@*"/>
    </xsl:copy>
</xsl:template>

1 个答案:

答案 0 :(得分:2)

只需修改身份转换,以便仅将排序应用于所需节点:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>

    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="Types">
                <xsl:sort select="Type1"/>
            </xsl:apply-templates>
            <xsl:apply-templates select="node()[not(self::Types)]|@*"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>