假设我有这个:
<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之后)
最佳答案
根据您希望执行匹配的具体方式,可以使用不同的方法来编写匹配的 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
找到一个立即前面有<bar>AAA</bar>
的baz :
foo/baz[preceding-sibling::*[1]/self::bar = 'AAA']
foo/bar[. = 'AAA']/following-sibling::*[1]/self::baz
找一个<bar>AAA</bar>
并返回紧随其后的任何元素,不一定名为 baz。
foo/bar[. = 'AAA']/following-sibling::*[1]
关于php - DOMXPath 根据先前的同级值获取同级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7139335/