XSLT - 标识节点,后跟另一个节点

时间:2016-03-28 08:09:23

标签: xml xslt xslt-2.0

我有一个像这样的xml,

<doc>
    <p>para<x>para</x>para<x>para</x>para</p>
    <p>para<x>para</x><x>para</x>para</p>
</doc>

我需要添加&#39;&#39;在<x>个节点之间,如果连续放置了几个<x><x>后跟另一个<x>节点)。

所以,对于上面的例子xml,输出应该是

<doc>
    <p>para<x>para</x>para<x>para</x>para</p>
    <p>para<x>para</x>,<x>para</x>para</p>
</doc>

我尝试编写一个xsl模板,用于标识所记录的连续<x>并添加了&#39;,&#39;如下,

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

    <xsl:template match="x[following-sibling::*[1][self::x]]">
        <x>
            <xsl:apply-templates/>
        </x>
        <xsl:text>,</xsl:text>
    </xsl:template>

但它增加了&#39;,&#39;以上两种情况。 (<x>后跟另一个<x>节点,<x>后跟文字)

有没有想过纠正这个xpath?

1 个答案:

答案 0 :(得分:3)

使用following-sibling::*[1] XPath仅检查最近的兄弟元素,而不是考虑文本节点。请尝试使用following-sibling::node()[1]

<xsl:template match="x[following-sibling::node()[1][self::x]]">
    <x>
        <xsl:apply-templates/>
    </x>
    <xsl:text>,</xsl:text>
</xsl:template>