【问题标题】:How to append XML string into a DOMDocument object?如何将 XML 字符串附加到 DOMDocument 对象中?
【发布时间】:2014-09-16 09:21:51
【问题描述】:

创建 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 个错误:

致命错误:在 C:... DOMException:C 中的错误文档错误:...

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

提前致谢。

【问题讨论】:

    标签: php xml domdocument


    【解决方案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();
    

    【讨论】:

    • 感谢 ThW 完美运行,帮助我了解和了解更多 PHP DOM 扩展 :)
    猜你喜欢
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2022-01-18
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多