给定此XML,什么XPath返回其prop
属性包含的所有元素Foo
(前三个节点):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
给定此XML,什么XPath返回其prop
属性包含的所有元素Foo
(前三个节点):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
Answers:
//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返回正确的答案,但是如果您想保证只在元素“ bla”中获得“ a”元素,则应该像其他人提到的那样使用
/bla/a[contains(@prop,'Foo')]
这将搜索整个xml文档中的所有“ a”元素,而不管嵌套在“ blah”元素中如何
//a[contains(@prop,'Foo')]
我出于透彻考虑和本着stackoverflow的精神添加了此内容。:)
xmlme.com
现在重定向到其他主机,并且似乎没有托管该工具或类似的工具。
descendant-or-self::*[contains(@prop,'Foo')]
要么:
/bla/a[contains(@prop,'Foo')]
要么:
/bla/a[position() <= 3]
解剖:
descendant-or-self::
轴-搜索下面的每个节点以及节点本身。通常说起来要比//好。我遇到了一些实现,其中//表示任意位置(根节点的后代或自身)。另一个使用默认轴。
* or /bla/a
标记-通配符匹配,/ bla / a是绝对路径。
[contains(@prop,'Foo')] or [position() <= 3]
[]中的条件。@prop是attribute :: prop的简写,因为attribute是另一个搜索轴。或者,您可以使用position()函数选择前三个。
您是否尝试过类似的方法:
// a [包含(@prop,“ Foo”)]
我以前从未使用过contains函数,但是怀疑它应该像广告中所说的那样工作...
试试这个:
// a [包含(@ prop,'foo')]
适用于文档中的任何“ a”标签