2010-02-10 54 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