Xml XSLT-标识后跟另一个节点的节点

Xml XSLT-标识后跟另一个节点的节点,xml,xslt,xslt-2.0,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> paraparapara 帕拉帕拉 如果连续放置两个节点(后接另一个节点),则需要在节点之间添加“,”

我有一个这样的xml

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

paraparapara

帕拉帕拉

如果连续放置两个
节点(
后接另一个
节点),则需要在
节点之间添加“,”

因此,对于上面的示例xml,输出应该是

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

paraparapara

帕拉帕拉,帕拉帕拉

我试图编写一个xsl模板,用于标识注释的
,并添加了“,”,如下所示

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

,
但它在上述两种情况下都添加了“,”。(
后接另一个
节点,
后接文本)


是否要更正此xpath?

使用以下同级:*[1]xpath只检查最近的同级元素,而不考虑文本节点。尝试使用以下同级::节点()[1]代替:

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

,