我有一串'source html'和一串'replacement html'。在'source html'中,我想查找具有特定类的节点,并将其内容替换为我的'replacement html'。我尝试过使用replaceChild方法,但这似乎要求我遍历一个级别(parentNode)。
这不起作用
$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);
如何替换我查询过的内容或节点?
答案 0 :(得分:1)
不是替换子节点,而是遍历它的子节点,删除它们并将新内容作为子节点插入。像
这样的东西foreach ($oldNode->childNodes as $child)
$oldNode->removeChild($child);
$oldNode->appendChild($replacement);
这将替换内容(子)而不是节点本身。
答案 1 :(得分:0)
这似乎有效!
$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);