我希望能够根据XML中的属性对元素进行排序。不幸的是,我似乎无法让它工作,到目前为止这是我的代码。
目前没有产生任何错误,但排序似乎从未应用降序。
<xsl:variable name="sortOrder">
<xsl:choose>
<xsl:when test="Lanes/@flip = 1">descending</xsl:when>
<xsl:otherwise>ascending</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select="Entry">
<xsl:sort data-type="number" select="@id" order="{$sortOrder}"/>
</xsl:for-each>
XML:
<Lanes flip="1">
<Entry id="1" value="0"/>
<Entry id="2" value="0"/>
</Lanes>
答案 0 :(得分:1)
<xsl:for-each select="Entry">
<xsl:sort data-type="number" select="@id" order="{$sortOrder}"/>
</xsl:for-each>
您的样本的测试用例:
<xml>
<Lanes flip="1">
<Entry id="1" value="0"/>
<Entry id="2" value="0"/>
</Lanes>
<Lanes flip="0">
<Entry id="1" value="0"/>
<Entry id="2" value="0"/>
</Lanes>
</xml>
XSL
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output indent="yes" />
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*" />
</xsl:copy>
</xsl:template>
<xsl:template match="Lanes">
<xsl:copy>
<xsl:variable name="sortOrder">
<xsl:choose>
<xsl:when test="@flip = 1">descending</xsl:when>
<xsl:otherwise>ascending</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:apply-templates select="Entry">
<xsl:sort data-type="number" select="@id" order="{$sortOrder}" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
为我输出:
<xml>
<Lanes>
<Entry id="2" value="0"></Entry>
<Entry id="1" value="0"></Entry>
</Lanes>
<Lanes>
<Entry id="1" value="0"></Entry>
<Entry id="2" value="0"></Entry>
</Lanes>
</xml>