Xml xsl:sort不排序数据

Xml xsl:sort不排序数据,xml,xslt,Xml,Xslt,我需要以下xml在id字段上排序: <top> <repeat1> <repeat2> <contents> <contentitem> <id>9</id> <moretags1/> <moretags2/> </c

我需要以下xml在id字段上排序:

<top>
<repeat1>
    <repeat2>
        <contents>
            <contentitem>
                <id>9</id>
                <moretags1/>
                <moretags2/>
            </contentitem>
        </contents>
    </repeat2>
</repeat1>
<repeat1>
    <repeat2>
        <contents>
            <contentitem>
                <id>6</id>
                <moretags1/>
                <moretags2/>
            </contentitem>
        </contents>
    </repeat2>
</repeat1>
<repeat1>
    <repeat2>
        <contents>
            <contentitem>
                <id>3</id>
                <moretags1/>
                <moretags2/>
            </contentitem>
        </contents>
    </repeat2>
</repeat1>
</top>

9
6.
3.
要这样分类:

<top>
<repeat1>
    <repeat2>
        <contents>
            <contentitem>
                <id>3</id>
                <moretags1/>
                <moretags2/>
            </contentitem>
        </contents>
    </repeat2>
</repeat1>
<repeat1>
    <repeat2>
        <contents>
            <contentitem>
                <id>6</id>
                <moretags1/>
                <moretags2/>
            </contentitem>
        </contents>
    </repeat2>
</repeat1>
<repeat1>
    <repeat2>
        <contents>
            <contentitem>
                <id>9</id>
                <moretags1/>
                <moretags2/>
            </contentitem>
        </contents>
    </repeat2>
</repeat1>
 </top>

3.
6.
9
换句话说,我希望contentitem分组保持不变,但在结果xml中按id顺序列出

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
<!--                                                -->
<xsl:strip-space elements="*"/>
<!--                                                -->
<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>
<!--                                                -->
<xsl:template match="contents">
    <xsl:copy>
        <xsl:apply-templates select="contentitem">
            <xsl:sort select="id" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

看起来您应该对
repeat1
元素进行排序,而不是对
内容
元素进行排序

请尝试以下XSLT:

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

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="top">
    <xsl:copy>
        <xsl:apply-templates select="repeat1">
            <xsl:sort select="repeat2/contents/contentitem/id" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

看起来您应该对
repeat1
元素进行排序,而不是对
内容
元素进行排序

请尝试以下XSLT:

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

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="top">
    <xsl:copy>
        <xsl:apply-templates select="repeat1">
            <xsl:sort select="repeat2/contents/contentitem/id" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

看起来您应该对
repeat1
元素进行排序,而不是对
内容
元素进行排序

请尝试以下XSLT:

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

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="top">
    <xsl:copy>
        <xsl:apply-templates select="repeat1">
            <xsl:sort select="repeat2/contents/contentitem/id" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

看起来您应该对
repeat1
元素进行排序,而不是对
内容
元素进行排序

请尝试以下XSLT:

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

<xsl:template match="node()|@*">
    <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="top">
    <xsl:copy>
        <xsl:apply-templates select="repeat1">
            <xsl:sort select="repeat2/contents/contentitem/id" data-type="number" order="ascending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>