Создание DOMDocument из DOMNode в PHP - PullRequest
8 голосов
/ 10 февраля 2010

Я получаю строку XML из определенного источника. Я создаю объект DOMDocument и загружаю в него строку XML (с помощью DOMDocument :: loadXML ()). Затем я перемещаюсь по документу XML, используя различные методы (например, DOMXPath), пока не найду нужный мне узел (конечно же, DOMNode).

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

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

Ответы [ 2 ]

15 голосов
/ 03 марта 2010

Вы также можете создать новый DOMDocument и вызвать на нем appendChild (), чтобы добавить корневой узел:

$new = new DomDocument;
$new->appendChild($new->importNode($node, true));

Это сработало для меня.

1 голос
/ 10 февраля 2010

Разве вы не можете просто создать новый DOMDocument и загрузить XML-файл узла?

$new = new DOMDocument;
$new->loadXML($node->ownerDocument->saveXML($node));

Я не могу попробовать это прямо сейчас, но это должно сработать.

...