将xml doc中的xml元素插入到其他xml文档中

时间:2010-10-20 13:17:00

标签: php xml simplexml domdocument

假设我需要xml文档:

<first_root>
  <element1/>
  <element2>
    <embedded_element/>
  </element2>
</first_root>

<foo>
  <bar/>
</foo>

如何使用php和DomDocument或SimpleXML将第二个xml doc放入第一个?

我希望它看起来像这样:

<first_root>
  <element1/>
  <element2>
    <foo>
      <bar/>
    </foo>
    <embedded_element/>
  </element2>
</first_root>

1 个答案:

答案 0 :(得分:2)

您可以使用DOMDocument来执行此操作:

<?php

$aDoc = DOMDocument::loadXML('<?xml version="1.0" encoding="UTF-8" ?>
<first_root>
  <element1/>
  <element2>
    <embedded_element/>
  </element2>
</first_root>');

$bDoc = DOMDocument::loadXML('<?xml version="1.0" encoding="UTF-8" ?>
<foo>
  <bar/>
</foo>');

$aEmbeddedElement = $aDoc->getElementsByTagName('embedded_element')->item(0);

$bFoo = $bDoc->documentElement;

$aImportedFoo = $aDoc->importNode($bFoo,true);

$aEmbeddedElement->insertBefore($aImportedFoo);

echo $aDoc->saveXML();
?>

在这里,我将XML导入DOMDocument s,然后我选择了第一个embedded_element次出现和foo节点。必须将深入 foo导入第一个文档后。现在,您可以在foo之前插入embedded_element

显然这只是一个幸福的案例......

文档:DOM

使用SimpleXML,您可以通过基于前两个文档构建第三个文档来实现此目的,因为您无法将SimpleXMLElements附加到其他文档中。 (或许你可以,但有一些我没有得到的)