Как включить существующий файл XML в созданный DOMDocument

Я создаю новый XML-файл с DOMDocument на PHP. Это отлично работает. Между документами я хочу добавить уже созданный XML-файл. Как я могу это сделать?

Существующий XML-документ:

    <?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<magazine id="0" time="2014-02-18T14:42:06.0Z" type="0">New magazine</magazine>
</book>
</books>

С помощью функций DOM PHP я создаю еще один XML-файл. Это отлично работает. Теперь я загружаю файл выше и создаю фреймент с помощью:

$fragement = $document->createDocumentFragment();
$fragement->appendXML($this->xmlparser);

Но сейчас я не знаю, как добавить фрагмент в мой документ. Я старался:

$document->documentElement->appendChild($fragement);

Это не влияет на мой XML-документ.

0

Решение

Вы не можете использовать appendXML() с этим документом, так как это добавит еще одну декларацию XML, которая разрешена только в начале документа. В общем appendXML() В любом случае это плохая идея, потому что вы играете быстро и свободно с необработанными данными XML. Используйте второй DOM, импортируйте узел документа в первый и добавьте его.


Вот так:

$xml1 = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<root><notbooks/></root>
XML;

$xml2 = <<<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<magazine id="0" time="2014-02-18T14:42:06.0Z" type="0">New magazine</magazine>
</book>
</books>
XML;

$dom1 = new DOMDocument();
$dom1->formatOutput       = true;  // These formatting options are only used
$dom1->preserveWhiteSpace = false; // for demonstration purposes here.
$dom1->loadXML($xml1);

$dom2 = new DOMDocument();
$dom2->loadXML($xml2);

$node = $dom1->importNode($dom2->documentElement, true);
$dom1->documentElement->appendChild($node);

$dom1->loadXML($dom1->saveXML()); // Just to make it pretty for the output below.

echo $dom1->saveXML();

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<notbooks/>
<books>
<book>
<magazine id="0" time="2014-02-18T14:42:06.0Z" type="0">New magazine</magazine>
</book>
</books>
</root>
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector