Как добавить строку XML в объект DOMDocument?

Создание объекта DOMDocument:

$getToken = '<getToken>...</getToken>';
$getToken_objeto = new DOMDocument("1.0", "UTF-8");
$getToken_objeto -> loadXML($getToken);

Попытка добавить строку XML (Signature) в созданный выше DOMDocument:

$Signature = '<Signature>...</Signature>';
$Signature_objeto = new DOMDocument("1.0", "UTF-8");
$Signature_objeto -> loadXML($Signature);
$Signature_nodeList = $Signature_objeto -> getElementsByTagName("Signature");
$Signature_node = $Signature_nodeList -> item(0);
$getToken_objeto -> importNode($Signature_node, true);
$getToken_objeto -> appendChild($Signature_node);

Я получаю 2 ошибки:

Неустранимая ошибка: необработанное исключение "DOMException" с сообщением "Неверная ошибка документа" в C:... DOMException: Неверная ошибка документа в C:...

Кажется простым для решения, но я совершенно неопытный, используя расширение PHP DOM.

Заранее спасибо.

1 ответ

Решение

Вы пытаетесь добавить исходный узел, а не импортированный.

$Signature_node = $getToken_objeto->importNode(
  $Signature_nodeList->item(0), true
);

Вы пытаетесь добавить узел к документу, но документ XML может иметь только один элемент документа, и он уже есть. Вы можете добавить его к элементу документа:

$getToken_objeto->documentElement->appendChild($Signature_node);

Но PHP может загружать фрагменты XML непосредственно в DOMDocumentFragment.

$xml = '<getToken>...</getToken>';
$fragmentXml = '<Signature>...</Signature>';

$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXpath($dom);

$fragment = $dom->createDocumentFragment();
$fragment->appendXml($fragmentXml);

$xpath
  ->evaluate('//getToken')
  ->item(0)
  ->appendChild($fragment);

echo $dom->saveXml();
Другие вопросы по тегам