我有一个像这样的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?
答案 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>