选择包含“foo”的属性的正确XPath是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

给定此XML,XPath将返回以下所有元素prop属性包含Foo(前三个节点):

<bla>
 <a prop="Foo1"/>
 <a prop="Foo2"/>
 <a prop="3Foo"/>
 <a prop="Bar"/>
</bla>
提问于
用户回答回答于
//a[contains(@prop,'Foo')]

如果我使用这个XML来获得结果的话,就可以工作了。

<bla>
 <a prop="Foo1">a</a>
 <a prop="Foo2">b</a>
 <a prop="3Foo">c</a>
 <a prop="Bar">a</a>
</bla>

编辑:另外要注意的是,虽然上面的XPath将返回特定XML的正确答案,但如果想保证只得到元素中的“a”元素“blah”。

/bla/a[contains(@prop,'Foo')]

这将搜索整个xml文档中的所有“a”元素,而不管嵌套在“blah”元素中。

//a[contains(@prop,'Foo')]  
用户回答回答于

这个XPath将为提供所有具有包含“foo”属性的节点,而不管节点名称或属性名称如何:

//attribute::*[contains(., 'Foo')]/..

当然,如果更感兴趣的是属性本身的内容,而不一定是它们的父节点,只需删除/.

//attribute::*[contains(., 'Foo')]

扫码关注云+社区