2013-10-29 151 views
0

我正在尋找獲取所有兄弟節點的所有唯一(無重複)嵌套節點的最佳方法。我感興趣的節點是「氣體」。兄弟節點是「內容」。我的簡化XML:如何選擇XSLT中所有兄弟節點的唯一子節點1

<Collection> 
    <Content> 
    <Html> 
    <root> 
     <Gases>NO2</Gases> 
     <Gases>CH4</Gases> 
     <Gases>O2</Gases> 
    </root> 
    </Html> 
    </Content> 
    <Content> 
    <Html> 
    <root> 
     <Gases>NO2</Gases> 
     <Gases>CH4</Gases> 
     <Gases>CO</Gases> 
     <Gases>LEL</Gases> 
     <Gases>NH3</Gases> 
    </root> 
    </Html> 
    </Content> 
</Collection> 

期望的結果:NO2 CH4 O2 CO LEL NH3

我是新來的XSLT所以任何幫助,將不勝感激。我一直在嘗試使用XPATH,similar to here,但沒有運氣。

回答

2

此XSLT樣式表將生成所需的輸出。請注意,它依賴於在單個Content元素內沒有重複的Gases元素。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 

    <xsl:strip-space elements="*"/> 

    <!-- Match Gases elements whose value does not appear in a Gases element inside a previous 
     Content element. --> 
    <xsl:template match="//Gases[not(. = ancestor::Content/preceding-sibling::Content//Gases)]"> 
    <xsl:value-of select="."/> 
    <xsl:text> </xsl:text> 
    </xsl:template> 

    <!-- Need to override the built-in template for text nodes, otherwise they will still get 
     printed out. --> 
    <xsl:template match="text()"/> 

</xsl:stylesheet> 
相關問題