Что не так с этим кодом PHP DOM? - PullRequest
0 голосов
/ 07 августа 2011
$doc = new DOMDocument();
$doc -> load("state.xml");
...snip...
$neworder = $doc -> createElement("order");
    $neworder -> appendChild($type);

Эта последняя строка кода вызывает сбой скрипта.500 HTTP ответа.Если я закомментирую это, скрипт будет работать нормально.

get_class () подтверждает, что и $ neworder, и $ type относятся к классу DOMElement.В чем может быть проблема?

...

От того, где я получаю узлы, которые я пытаюсь добавить:

Отсюда и тип $.

for ($i = 0; $i < $ordersummary -> length; $i++)
{
   $o = $ordersummary -> item($i);
   $type = $o -> getElementsByTagName("type") -> item(0);
   ...

и $ ordersummary получается следующим образом

$ordersummary -> loadXML($_POST["data"]);
$ordersummary = $ordersummary -> getElementsByTagName("order");

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Исключение выдается, потому что вы пытаетесь добавить узел из одного документа в другой. Это не поддерживается API DOM.

РЕДАКТИРОВАТЬ: Единственный разумный обходной путь заключается в глубоком копировании элемента. В зависимости от того, является ли тип сложной структурой XML, может быть намного проще сериализовать узел типа в строку XML, а затем создать DOMDocumentFragment для принимающего объекта DOMDocument и загрузить необработанный XML в этот DOMDocumentFramgnent. Затем вы можете добавить DOMDocumentFragment так же, как и элемент DOME, чтобы вставить данные типа XML.

0 голосов
/ 07 августа 2011

Как указал jswolf19, вы не можете добавить узел из другого документа из документации:

DOM_WRONG_DOCUMENT_ERR

Повышается, если newnode был создан из документа, отличного от того, который создал этот узел.

...