获取不存在具有特定值的子元素的父元素

  • 本文关键字:元素 不存在 获取 xml xslt-1.0
  • 更新时间 :
  • 英文 :


使用XLST 1.0,我需要检索aa元素,其中它没有bb带有"过滤我"的元素或者"把我也过滤掉"。

<data>
    <aa>
        <bb>Filter me out</bb>
        <bb>Some information</bb>
    </aa>
    <aa>
        <bb>And filter me out too</bb>
        <bb>Some more information</bb>
    </aa>
    <aa>
        <bb>But, I need this information</bb>
        <bb>And I need this information</bb>
    </aa>
</data>

一旦我有了正确的aa元素,我将输出其bb的每个元素,如下所示:

<notes>
    <note>But, I need this information</note>
    <note>And I need this information</note>
</notes>

非常感谢。

这类事情的标准方法是使用模板

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <!-- copy everything as-is from input to output unless I say otherwise -->
  <xsl:template match="@*|node()">
    <xsl:copy><xsl:apply-templates select="@*|node()" /></xsl:copy>
  </xsl:template>
  <!-- rename aa to notes -->
  <xsl:template match="aa">
    <notes><xsl:apply-templates select="@*|node()" /></notes>
  </xsl:template>
  <!-- and bb to note -->
  <xsl:template match="bb">
    <note><xsl:apply-templates select="@*|node()" /></note>
  </xsl:template>
  <!-- and filter out certain aa elements -->
  <xsl:template match="aa[bb = 'Filter me out']" />
  <xsl:template match="aa[bb = 'And filter me out too']" />
</xsl:stylesheet>

最后两个模板匹配不想要的特定aa元素,然后什么也不做。任何与特定筛选模板不匹配的aa元素都将与不太特定的<xsl:template match="aa">匹配,并重命名为notes

任何没有特定模板的内容都将被第一个"标识"模板捕获,并原封不动地复制到输出中。这包括封装所有aa元素的父元素(您在示例中没有提供这些元素,但它必须存在,否则输入将不是格式良好的XML)。

相关内容

  • 没有找到相关文章

最新更新