PHP DOMDocument перемещает узлы из документа в другой - PullRequest
5 голосов
/ 20 апреля 2011

ОК, я пытаюсь достичь этого часами и не могу найти решение, вот и я!

У меня есть 2 DOMDocument, и я хочу переместить узлы документа на другой. Я знаю структуру обоих документов, и они относятся к одному типу (поэтому у меня не должно возникнуть проблем с их объединением).

Кто-нибудь может мне помочь? Если вам нужно больше информации, дайте мне знать.

Спасибо!

Ответы [ 4 ]

9 голосов
/ 20 апреля 2011

Чтобы скопировать (или) переместить узлы на другой DOMDocument, вам придется импортировать узлы в новый DOMDocument с importNode().Пример взят из руководства:

$orgdoc = new DOMDocument;
$orgdoc->loadXML("<root><element><child>text in child</child></element></root>");
$node = $orgdoc->getElementsByTagName("element")->item(0);

$newdoc = new DOMDocument;
$newdoc->loadXML("<root><someelement>text in some element</someelement></root>");

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

Где первый параметр importNode() - это сам узел, а второй параметр - логическое значение, указывающее, следует ли импортировать все дерево узлов.

2 голосов
/ 20 апреля 2011

Вам необходимо импортировать его в целевой документ. См. DOMDocument :: importNode

0 голосов
/ 27 июня 2014
<?php
    protected function joinXML($parent, $child, $tag = null)
    {
        $DOMChild = new DOMDocument;
        $DOMChild->loadXML($child);
        $node = $DOMChild->documentElement;

        $DOMParent = new DOMDocument;
        $DOMParent->formatOutput = true;
        $DOMParent->loadXML($parent);

        $node = $DOMParent->importNode($node, true);

        if ($tag !== null) {
            $tag = $DOMParent->getElementsByTagName($tag)->item(0);
            $tag->appendChild($node);
        } else {
            $DOMParent->documentElement->appendChild($node);
        }

        return $DOMParent->saveXML();
    }
?>
0 голосов
/ 29 ноября 2013

Использование этого кода для неизвестной структуры документа.

$node = $newDoc->importNode($oldDoc->getElementsByTagName($oldDoc->documentElement->tagName)->item(0),true);
...