将DOMDocument根元素附加到另一个DOMDocument

时间:2014-07-24 21:27:20

标签: php xml domdocument

我有2" DOMDocument"对象 - $ original和$ additional。我想要的是从$ additional DOMDocument中取出所有孩子并将其附加到$ original文档的末尾。

我的计划是获取$附加文档的根元素。我试着用:

$root = $additional->documentElement;
$original->appendChild($root)

但是我收到了appendChild期望DOMNode对象作为参数的错误。 我试图通过以下方式访问文档的每个孩子:

$additional->childNodes->item(0);

但它返回DOMElement的对象。你能建议如何获得DOMNode类的对象吗?提供此导入操作的最方便方法是什么?

$ original XML看起来像:

<?xml version="1.0" encoding="utf-8"?>
<Product>
     <RecordReference>345345</RecordReference>
     <NotificationType>03</NotificationType>
     <NumberOfPages>100</NumberOfPages 
</Product>

$ additional XML看起来像:

<?xml version="1.0" encoding="utf-8"?>
<MainSubject>
    <SubjectScheme>10</SubjectScheme>
</MainSubject>

我想要的是:

<?xml version="1.0" encoding="utf-8"?>
<Product>
     <RecordReference>345345</RecordReference>
     <NotificationType>03</NotificationType>
     <NumberOfPages>100</NumberOfPages>
     <MainSubject>
         <SubjectScheme>10</SubjectScheme>
     </MainSubject> 
</Product>

1 个答案:

答案 0 :(得分:4)

DOMElement是DOMNode,DOMNode是超类。以下是元素,文本和其他节点的几个子类。只需迭代,导入并追加它们即可。

$targetDom = new DOMDocument();
$targetDom->loadXML('<root/>');

$sourceDom = new DOMDocument();
$sourceDom->loadXml('<items><child/>TEXT</items>');

foreach ($sourceDom->documentElement->childNodes as $child) {
  $targetDom->documentElement->appendChild(
    $targetDom->importNode($child, TRUE)
  );
}

这也适用于文档元素。

$targetDom = new DOMDocument();
$targetDom->loadXML('<root/>');

$sourceDom = new DOMDocument();
$sourceDom->loadXml('<items><child/>TEXT</items>');

$targetDom->documentElement->appendChild(
  $targetDom->importNode($sourceDom->documentElement, TRUE)
);

echo $targetDom->saveXml();

DOMDocument::importNode()在文档的上下文中创建提供的节点的副本。只能将属于文档的节点附加到其中。