如何在 XSLT 1 中选择所有同级节点的唯一子节点



我正在寻找获取所有同级节点的所有唯一(无重复)嵌套节点的最佳方法。我感兴趣的节点是"气体"。 同级节点是"内容"。 我的简化 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,类似于这里,但没有运气。

此 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>

最新更新