繁体   English   中英

PHP:“无法获取 DOMElement。节点不再存在”使用 DOMXpath

[英]PHP: "Couldn't fetch DOMElement. Node no longer exists in" using DOMXpath

我有一些包含以下内容的 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。 63行的/path/to/my/file.php 中不再存在节点

如果只有一个嵌套 div,它会起作用:

<div class="test">
  Outer
  <div class="test">Inner 1</div>
</div>

为什么会发生这种情况,我怎样才能让它工作?

尝试改变

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM