有没有办法检测具有某个子元素的元素,然后将所有这些元素移到文件的底部?
示例:
<a>
<b>
<d />
</b>
<b>
<c />
</b>
<b>
<d />
</b>
</a>
在这种情况下,我希望包含b
的所有c
都位于文件的底部:
<a>
<b>
<d />
</b>
<b>
<d />
</b>
<b>
<c />
</b>
</a>
答案 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>