Добавить корневой элемент DOMDocument к другому DOMDocument
У меня есть 2 объекта "DOMDocument" - $ оригинал и $ дополнительно. Я хочу взять всех детей из дополнительного $ DOMDocument и добавить его в конец оригинального документа.
Мой план состоял в том, чтобы внедрить элемент дополнительного документа $. Я пытался использовать:
$root = $additional->documentElement;
$original->appendChild($root)
Но я получаю сообщение об ошибке, что appendChild ожидает объект DOMNode в качестве аргумента. Я пытался получить доступ к каждому ребенку документа через:
$additional->childNodes->item(0);
Но он возвращает объект DOMElement. Можете ли вы посоветовать, как получить объект класса DOMNode? Каков наиболее удобный способ выполнить эту операцию импорта?
$ оригинал XML выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<Product>
<RecordReference>345345</RecordReference>
<NotificationType>03</NotificationType>
<NumberOfPages>100</NumberOfPages
</Product>
$ дополнительный 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 ответ
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()
создает копию предоставленного узла в контексте документа. Только узлы, принадлежащие документу, могут быть добавлены к нему.