php - DOMXPath 根据先前的同级值获取同级

标签 php xml dom domxpath

假设我有这个:

<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/

相关文章:

Javascript 和 JQuery - 将 DOM 插入 JQuery

jquery - 在 HTML 中动态移动结束标记的位置

php - 为什么给 mysqli_query 时换行符消失了?

php - Laravel - 检索返回给 Controller 的mysql查询结果数组以显示在 View 中

php - 用 MySqlI 查询的结果填充 PHP 数组

xml - scala.xml.RuleTransformer 的复杂性真的呈指数级增长吗?

javascript - 是否有使用成员函数作为事件监听器的 ES6 快捷方式?

php - var 或 var equals 在 php 中是什么意思?

wpf - 为什么在我使用 ParserContext 时 XamlReader 会抛出异常?

c# - Linq XML 动态构建