如何将XML字符串附加到DOMDocument对象?

时间:2014-07-24 17:25:14

标签: php xml domdocument

创建DOMDocument对象:

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

尝试将XML字符串(签名)附加到上面创建的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个错误:

致命错误:未捕获的异常&#39; DOMException&#39;有消息&#39;错误的文档错误&#39;在C:...... DOMException:C中错误的文档错误:...

似乎很容易解决,但使用PHP DOM扩展时非常缺乏经验。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您正在尝试附加原始节点 - 而不是导入的节点。

$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();