XSLT - 识别跟随另一个节点的节点

3

我有一个如下所示的 XML:

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

如果有连续放置的<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>,并将逗号添加如下:

 <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>

但它会在上述两种情况下添加“,”(<x>后跟另一个<x>节点和<x>后跟文本)。 有没有什么办法来纠正这个xpath?
1个回答

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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接