【发布时间】:2020-03-20 18:28:55
【问题描述】:
我有一些包含以下内容的 HTML:
<div class="test">
Outer
<div class="test">Inner 1</div>
<div class="test">Inner 2</div>
</div>
我正在对这些元素的内容做str_replace():
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
foreach($xpath->query("//div[@class='test']") as $node) {
$node->nodeValue = str_replace(" ", "X", $node->nodeValue);
}
这应该用“X”替换任何空格。
但是会导致这个错误:
警告:无法获取 DOMElement。节点不再存在于 /path/to/my/file.php 第 63
行
如果只有一个嵌套的 div 就可以了:
<div class="test">
Outer
<div class="test">Inner 1</div>
</div>
为什么会发生这种情况,我怎样才能让它发挥作用?
【问题讨论】:
-
您要替换哪些空格?作为调试,将
echo $node->nodeValue.PHP_EOL;添加到循环中以检查它正在处理的文本。 -
我认为问题在于您只需要查询元素一次,然后遍历对象。目前,您正在一遍又一遍地执行相同的查询。
$elements = $xpath->query("//div[@class='test']"然后foreach($elements as $node) {...} -
@NigelRen 它首先输出“Outer Inner 1 Inner 2”然后“Inner 1”,然后发生错误。然后它输出 "" 并且错误再次发生。
-
@EternalHour 谢谢,但这没有任何区别。