Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php:dom用另一个dom中的根节点替换节点_Php_Dom_Replace - Fatal编程技术网

php:dom用另一个dom中的根节点替换节点

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 = "<

我需要从其他文档的整个节点更新一个节点:

原始XML:

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