XSLT - 如何对文件底部进行排序

时间:2014-07-23 14:00:31

标签: xml sorting xslt

有没有办法检测具有某个子元素的元素,然后将所有这些元素移到文件的底部?

示例:

<a>
    <b>
        <d />
    </b>
    <b>
        <c />
    </b>
    <b>
        <d />
    </b>
</a>

在这种情况下,我希望包含b的所有c都位于文件的底部:

<a>
    <b>
        <d />
    </b>
    <b>
        <d />
    </b>
    <b>
        <c />
    </b>
</a>

2 个答案:

答案 0 :(得分:1)

a

撰写模板
<xsl:template match="a">
  <xsl:copy>
   <xsl:apply-templates select="@* | node()[not(self::b[c])]"/>
   <xsl:apply-templates select="b[c]"/>
 </xsl:copy>
</xsl:template>

并使用

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

复制其他节点。

答案 1 :(得分:1)

如果您更喜欢使用sort,您可以这样做:

<xsl:template match="a">
    <xsl:copy>
        <xsl:apply-templates select="b">
            <xsl:sort select="not(c)" data-type="text" order="descending"/>
        </xsl:apply-templates>
    </xsl:copy>
</xsl:template>