2011-08-07 35 views
0
$doc = new DOMDocument(); 
$doc -> load("state.xml"); 
...snip... 
$neworder = $doc -> createElement("order"); 
    $neworder -> appendChild($type); 

最后一行代码导致脚本失败。 500个HTTP响应。如果我将它评论出来,脚本运行良好。这个PHP DOM代码有什么问题?

get_class()确认$ neworder和$ type都是DOMElement类。问题是什么?

...

在哪里我得到我想要添加节点:

这是$类型从何而来。

for ($i = 0; $i < $ordersummary -> length; $i++) 
{ 
    $o = $ordersummary -> item($i); 
    $type = $o -> getElementsByTagName("type") -> item(0); 
    ... 

和$ ordersummary是这样

$ordersummary -> loadXML($_POST["data"]); 
$ordersummary = $ordersummary -> getElementsByTagName("order"); 
+0

可能重复的[为什么我得到错误500?](http://stackoverflow.com/questions/4651083/why-do-i-get-error-500) – AgentConundrum

+0

什么是错误信息? –

+0

PHP致命错误:未收到异常'DOMException',并显示'错误的文档错误'消息。 –

回答

1

由于您尝试将一个文档中的节点追加到另一个文档中,因此抛出异常。这不受DOM API的支持。

编辑:唯一的解决方法是深度复制元素。根据类型是否是一个复杂的XML结构,将类型节点序列化为XML字符串可能会更容易,然后为接收的DOMDocument对象创建一个DOMDocumentFragment,并将原始XML加载到此DOMDocumentFramgnent中。然后,您可以像添加DOMElement一样附加DOMDocumentFragment以插入类型XML数据。

0

获得jswolf19指出的那样,你不能追加从不同的文档来一个节点,从文档:

DOM_WRONG_DOCUMENT_ERR

Raised if newnode was created from a different document than the one that created this node.