这个PHP DOM代码有什么问题?

时间:2011-08-07 03:18:07

标签: php xml dom domdocument

$doc = new DOMDocument();
$doc -> load("state.xml");
...snip...
$neworder = $doc -> createElement("order");
    $neworder -> appendChild($type);

最后一行代码导致脚本失败。 500 HTTP响应。如果我发表评论,脚本运行正常。

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

...

我正在尝试添加节点的位置:

这是$ type来自的地方。

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");

2 个答案:

答案 0 :(得分:1)

抛出异常是因为您尝试将一个节点中的节点附加到另一个文档中。 DOM API不支持。

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

答案 1 :(得分:0)

正如jswolf19指出的那样,你不能在文档中附加来自不同文档的节点:

  

DOM_WRONG_DOCUMENT_ERR

     

如果newnode是从与创建此节点的文档不同的文档创建的,则引发。