Как добавить строку 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();