使用PHP从DOM节点获取内容,但不从其子节点获取内容

时间:2013-11-15 18:09:00

标签: php dom xpath domxpath

是否可以使用PHP的DOMXPath(或类似的替代方法)从以下结构中提取值bar而不是值foo

<div>
    <p><span>foo</span>bar</p>
</div>

到目前为止,我所有的尝试都返回了节点后代以及节点本身的内容,这不是我想要的。

2 个答案:

答案 0 :(得分:2)

简单的方法是查找p的直接子项的文本节点:

$nodes = $xpath->query('//div/p/text()');

您可能需要使用其他选择器代替//div/,但关键位为p/text()/表示“仅直接子节点”,text()表示“仅文本节点”。所以它们一起意味着“作为文本节点的直接孩子”。

答案 1 :(得分:1)

信用应该转到@lonesomeday,因为我用他的方法更新了我的答案:

$dom = new DOMDocument;
$dom->loadHTML('<div><p><span>foo</span>bar</p></div>');

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//div/p/text()');

foreach($nodes as $node) {
    echo $node->nodeValue . '<br>';
}

Read this tutorial有关语法的更多帮助。