Вставьте элемент XML из документа XML в другой документ XML - PullRequest
0 голосов
/ 20 октября 2010

Допустим, я должен xml документов:

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

и

<foo>
  <bar/>
</foo>

Как я могу поместить этот второй документ XML в первый, используя php и DomDocument или SimpleXML?

Я хочу, чтобы это выглядело примерно так:

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

1 Ответ

2 голосов
/ 20 октября 2010

Вы можете сделать это, используя 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 в другие.(Или, может быть, вы можете, но есть кое-что, что я не получил)

...