我正在寻找获得所有兄弟节点的所有唯一(无重复)嵌套节点的最佳方法。我感兴趣的节点是“Gases”。兄弟节点是“内容”。我简化的XML:
<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,但没有运气。
答案 0 :(得分:2)
此XSLT样式表将生成所需的输出。请注意,它依赖于单个 Gases
元素中没有重复的Content
元素。
<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>