2016-03-28 74 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> 
相關問題