我有一些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>为什么会发生这种事,我怎样才能让它起作用?
发布于 2020-03-21 15:18:04
试着改变
foreach($xpath->query("//div[@class='test']") as $node) 至
foreach($xpath->query('//div[@class="test"]//div[@class="test"]') as $node)按评论编辑:
假设外部元素中有一个空格(即它的“外部1:”):
<?php
$string = <<<XML
<div class="test">
Outer 1
<div class="test">Inner 1</div>
<div class="test">Inner 2</div>
</div>
XML;
$dom = new DOMDocument();
$dom->loadHTML($string);
$xpath = new DOMXpath($dom);
foreach($xpath->query('//div[@class="test"]//text()') as $node) {
$nnode = trim($node->nodeValue);
echo $nnode = str_replace(" ", "X", $nnode);
}https://stackoverflow.com/questions/60779753
复制相似问题