是否可以使用PHP的DOMXPath(或类似的替代方法)从以下结构中提取值bar
而不是值foo
?
<div>
<p><span>foo</span>bar</p>
</div>
到目前为止,我所有的尝试都返回了节点后代以及节点本身的内容,这不是我想要的。
答案 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有关语法的更多帮助。