如何使用xsl将属性值的元素移动到最后一个兄弟位置?

时间:2014-03-06 17:43:46

标签: xslt

我需要将属性id中具有给定值的元素移动(不复制)到其兄弟姐妹的最后位置,例如//ul/li[@id='b']

输入:

<ul>
    <li id="a">a</li>
    <li id="b">b</li>
    <li id="c">c</li>
    <li id="d">d</li>
    ...
</ul>

输出:

<ul>
    <li id="a">a</li>
    <li id="c">c</li>
    <li id="d">d</li>
    ...
    <li id="b">b</li>
</ul>

2 个答案:

答案 0 :(得分:3)

如果您的输入XML与问题中的XML一样简单,您可以使用:

<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="ul">
    <ul>
        <xsl:apply-templates select="li[@id != 'b']"/>
        <xsl:apply-templates select="li[@id = 'b']"/>
    </ul>
</xsl:template>

<xsl:template match="li">
    <xsl:copy-of select="."/>
</xsl:template>
</xsl:transform>

答案 1 :(得分:1)

这可能有所帮助:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" indent="yes" encoding="UTF-8" standalone="yes"/>
    <xsl:param name="id" select="string('b')"/>
    <xsl:template match="ul">
        <xsl:element name="ul">
           <xsl:apply-templates select="li[@id!=$id]"/>
           <xsl:apply-templates select="li[@id=$id]"/>
        </xsl:element>
    </xsl:template>

    <xsl:template match="li">
        <xsl:copy-of select="."/>
    </xsl:template>

</xsl:stylesheet>