选择满足多个条件的特定节点

时间:2012-03-05 10:01:24

标签: xml xslt

我的问题如下:我尝试将特定template应用于符合多个条件的节点。我的XML看起来像:

<Root>
  <A>
    <id>1</id>
    <B>
      <C>
        <name>C_name1</name>
        <D>
          <E>label1</E>
          <E>label2</E>
        </D>
      </C>
      <C>
        <name>C_name2</name>
        <D>
          <E>label1</E>
          <E>label3</E>
        </D>
      </C>
    </B>
  </A>
  <A>
    ...
  </A>
</Root>

我想选择所有A节点,以便A[B/C/name = 'specific_name']如果该节点存在,我也希望A这样的节点符合D/E = `specific_label'。因此,我想要A[B/C[name = 'specific_name']/D/E = 'specific_label']之类的东西,但这种语法不起作用......

满足我的要求并在正确的节点上应用我的模板的正确语法是什么?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

除了您找到的答案之外,还可以使用以下XPath表达式:

A[B/C[name='specific_name' and D/E='specific_label']] 

这是连接多个条件的唯一正确方法,如果其中一些条件包含position()函数,它与上下文相关,并且在包含在不同谓词中时通常具有不同的值。

答案 1 :(得分:1)

实际上正确的语法似乎是:

<xsl:template match="Root">
    <xsl:apply-templates select="A[B/C[name='specific_name'][D/E='specific_label']]" />
</xsl:template>

希望它有所帮助! :)