2014-07-24 25 views
0

創建DOMDocument對象:如何將XML字符串附加到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個錯誤:

致命錯誤:未捕獲的異常'DOMException'在C中有'Wrong Document Error'消息:... DOMException:C中出現錯誤的文檔錯誤:...

似乎很容易解決,但我很不熟悉使用PHP DOM擴展。

在此先感謝。

回答

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(); 
+0

謝謝ThW工作完美,並幫助我瞭解和了解更多的PHP DOM擴展:) – mikl