我的问题如下:我尝试将特定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']
之类的东西,但这种语法不起作用......
满足我的要求并在正确的节点上应用我的模板的正确语法是什么?
感谢您的帮助!
答案 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>
希望它有所帮助! :)