使用PHP和XPath替换节点的内容
我有一个“源html”字符串和一个“替换html”字符串。在“源html”中,我想查找具有特定类的节点,并用我的“替换html”替换其内容。我尝试过使用replaceChild方法,但这似乎需要遍历一个level up(parentNode) 这不管用使用PHP和XPath替换节点的内容,php,xpath,Php,Xpath,我有一个“源html”字符串和一个“替换html”字符串。在“源html”中,我想查找具有特定类的节点,并用我的“替换html”替换其内容。我尝试过使用replaceChild方法,但这似乎需要遍历一个level up(parentNode) 这不管用 $dom = new DOMDocument; $dom->loadXml($sourceHTML); $replacement = $dom->createDocumentFragment(); $replacem
$dom = new DOMDocument;
$dom->loadXml($sourceHTML);
$replacement = $dom->createDocumentFragment();
$replacement->appendXML($replacementHTML);
$xpath = new DOMXPath($dom);
$oldNode = $xpath->query('//div[contains(@class,"arrangement--index__field-dato")]')->item(0);
$oldNode->replaceChild($replacement, $oldNode);
这是可行的,但被取代的不是内容
$dom = new DOMDocument;
$dom->loadXml($sourceHTML);
$replacement = $dom->createDocumentFragment();
$replacement->appendXML($replacementHTML);
$xpath = new DOMXPath($dom);
$oldNode = $xpath->query('//div[contains(@class,"arrangement--index__field-dato")]')->item(0);
$oldNode->parentNode->replaceChild($replacement, $oldNode);
如何替换已查询的内容或节点?这似乎可行
$dom = new DOMDocument;
$dom->loadXml($sourceHTML);
$replacement = $dom->createDocumentFragment();
$replacement->appendXML($replacementHTML);
$xpath = new DOMXPath($dom);
$oldNode = $xpath->query('//div[contains(@class,"arrangement--index__field-dato")]')->item(0);
$oldNode->removeChild($oldNode->firstChild);
$oldNode->appendChild($replacement);
与其替换子节点,不如在其子节点上循环,放下它们并将新内容作为子节点插入。差不多
foreach ($oldNode->childNodes as $child)
$oldNode->removeChild($child);
$oldNode->appendChild($replacement);
这将替换内容(子节点),而不是节点本身。请注意,可能有多个子节点,因此最好在该节点上循环并删除所有子节点。请看我的答案。与其逐个删除子节点,不如$oldNode->nodeValue=“”;