2016-03-28 76 views
2

我有这样的XML,XSLT - 识别节点之后的另一个节点

<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>紧接着又<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模板FO识别连续<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?

回答

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> 
相关问题