php:dom用另一个dom中的根节点替换节点
我需要从其他文档的整个节点更新一个节点: 原始XML:php:dom用另一个dom中的根节点替换节点,php,dom,replace,Php,Dom,Replace,我需要从其他文档的整个节点更新一个节点: 原始XML: <a> <b>Bat</b> </a> 球棒 我想要的输出: <a> <b>bi</b> </a> 毕 第一次尝试:替换为documentfragment $original = "<a> <b>Bat</b> </a>"; $replace = "<
<a>
<b>Bat</b>
</a>
球棒
我想要的输出:
<a>
<b>bi</b>
</a>
毕
第一次尝试:替换为documentfragment
$original = "<a>
<b>Bat</b>
</a>";
$replace = "<b>Bi</b>";
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($original);
$xpath = new DOMXpath($dom);
$b = $xpath->query('//b')->item(0);
$fragment = $dom->createDocumentFragment();
$fragment->appendXML($replace);
$dom->replaceChild($fragment, $b);
echo $dom->saveXML();
$original=”
球棒
";
$replace=“Bi”;
$dom=新的DOMDocument('1.0','utf-8');
$dom->loadXML($original);
$xpath=newdomxpath($dom);
$b=$xpath->查询('//b')->项(0);
$fragment=$dom->createDocumentFragment();
$fragment->appendXML($replace);
$dom->replaceChild($fragment,$b);
echo$dom->saveXML();
错误:
致命错误:未捕获异常“DomeException”,消息为“未找到”
/home/zital/scripts/php/dom.php中的错误:17堆栈跟踪:
0/home/zital/scripts/php/dom.php(17):DOMNode->replaceChild(对象(DOMDocumentFragment),对象(DOMElement))
第17行的/home/zital/scripts/php/dom.php中抛出了1{main}
第二次尝试:通过导入节点替换
$original = "<a>
<b>Bat</b>
</a>";
$replace = "<b>Bi</b>";
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadXML($original);
$xpath = new DOMXpath($dom);
$b = $xpath->query('//b')->item(0);
$dom2 = new DOMDocument('1.0', 'utf-8');
$dom2->loadXML($replace);
$replace = $dom2->documentElement;
$replace = $dom->importNode($replace, true);
$dom->replaceChild($replace, $b);
echo $dom->saveXML();
$original=”
球棒
";
$replace=“Bi”;
$dom=新的DOMDocument('1.0','utf-8');
$dom->loadXML($original);
$xpath=newdomxpath($dom);
$b=$xpath->查询('//b')->项(0);
$dom2=新的DOMDocument('1.0','utf-8');
$dom2->loadXML($replace);
$replace=$dom2->documentElement;
$replace=$dom->importNode($replace,true);
$dom->replaceChild($replace,$b);
echo$dom->saveXML();
错误:
致命错误:未捕获异常“DomeException”,消息为“未找到”
/home/zital/scripts/php/dom.php:42堆栈跟踪中的错误'
0/home/zital/scripts/php/dom.php(42):DOMNode->replaceChild(对象(DOMElement),对象(DOMElement))
第42行的/home/zital/scripts/php/dom.php中抛出了1{main}
您没有多做一步来获取documentElement
$dom->documentElement->replaceChild($replace, $b);
结果将是
<?xml version="1.0"?>
<a><b>Bi</b></a>
第二次尝试的结果是完美的:dwooldn
$b->parentNode->replaceChild(…
是更好的选择吗?@Yoshi是的,当然。思考问题:)。如果我写我自己,那么我会那样写。但是当我纠正别人的代码,试图保留它时
$b->parentNode->replaceChild($replace, $b);