2010-02-10 55 views
6

我從某個源獲取XML字符串。我創建一個DOMDocument對象並將XML字符串加載到其中(使用DOMDocument :: loadXML())。然後,我使用各種方法(例如DOMXPath)瀏覽XML文檔,直到找到所需的節點(當然是DOMNode)。從PHP中的DOMNode創建DOMDocument

這個節點有許多後代,我想取整個節點(及其後代)並從中創建一個新的DOMDocument對象。我不知道如何做到這一點;我嘗試創建一個新的DOMDocument並使用DOMDocument :: importNode(),但是這似乎只在DOMDocument已經有一個主文檔節點的情況下才起作用,在這種情況下,它會將導入的節點作爲主文檔節點的子節點追加,這不是我想要的 - 我想讓導入的節點成爲DOMDocument主節點。

也許有這樣做(即一個更簡單的方法來提取,我想變成自己的文檔中的原始XML的一部分)更簡單的方法,但我不知道它。我對DOMDocument相對來說比較新,儘管我已經使用SimpleXMLElement足以讓它惱火。

回答

13

你也可以創建一個新的DOMDocument和調用的appendChild()上添加一個根節點:

 
$new = new DomDocument; 
$new->appendChild($new->importNode($node, true)); 

爲我工作。

0

難道你不能只是創建一個新的DOMDocument並加載節點的XML?

$new = new DOMDocument; 
$new->loadXML($node->ownerDocument->saveXML($node)); 

我現在無法嘗試,但應該可以。

+0

這應該可以工作,但會涉及序列化和重新解析'importNode()'避免的XML代碼。 – thomasrutter 2016-06-28 00:32:43