假设我有这个:
<foo>
<bar>CCC</bar>
<baz>sometexthere</baz>
</foo>
<foo>
<bar>AAA</bar>
<baz>sometext</baz>
</foo>
<foo>
<bar>DDD</bar>
<baz>something</baz>
</foo>
现在,我希望获得 baz 值,该值在 bar 之后,值 AAA (!但仅限于值 AAA !)。我不知道我有多少“foo”,所以我不能写出类似的东西:
$element->item(0) // I don't know the exact number
那么如何得到baz的值,它在具有特定值的bar之后呢?
(对于上面的例子,我想获得 sometext ,因为它来自 AAA )
答案 0 :(得分:6)
根据您希望如何执行匹配,有不同的方法来编写匹配的XPath。以下是一些选项:
找到一个baz,其中还有<bar>AAA</bar>
,但不一定在它之前(它可能会在之后,或者之间可能还有其他元素):
foo[bar = 'AAA']/baz
找到以<bar>AAA</bar>
开头的baz:
foo/baz[preceding-sibling::bar = 'AAA']
foo/bar[. = 'AAA']/following-sibling::baz
在[{1}}:
之前找到baz 立即<bar>AAA</bar>
找到foo/baz[preceding-sibling::*[1]/self::bar = 'AAA']
foo/bar[. = 'AAA']/following-sibling::*[1]/self::baz
并返回紧随其后的任何元素,不一定命名为baz。
<bar>AAA</bar>
答案 1 :(得分:2)
基本查询是查找包含bar
的{{1}},然后导航到相应的AAA
元素。
baz
或者,找到所有//foo/bar[.="AAA"]/../baz
并根据关联的baz
进行过滤。
bar
或//foo/baz[../bar = "AAA"]
内的baz
个foo
包含bar
AAA
。
//foo[bar="AAA"]/baz
如果您不熟悉XPath表达式,请将XML Path Language (XPath)标记为以后。