簡體   English   中英

php:dom從另一個dom的根節點替換節點

[英]php: dom replace node by root node from another dom

我需要從其他文檔的整個節點更新節點:

原始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();

錯誤:

致命錯誤:/home/zital/scripts/php/dom.php:17中未捕獲的異常'DOMException',消息'未找到錯誤'堆棧跟蹤:

0 /home/zital/scripts/php/dom.php(17):DOMNode-> replaceChild(Object(DOMDocumentFragment),Object(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();

錯誤:

致命錯誤:/home/zital/scripts/php/dom.php:42中未捕獲的異常'DOMException',消息'未找到錯誤'堆棧跟蹤:

0 /home/zital/scripts/php/dom.php(42):DOMNode-> replaceChild(Object(DOMElement),Object(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>

UPD:

按照Yoshi評論的相當正確的說法,最好以這種方式寫這個

$b->parentNode->replaceChild($replace, $b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM