$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");
抛出异常,因为您试图将一个节点从一个文档附加到另一个文档。这是DOM API不支持的。
编辑:唯一合理的解决方法是深度复制元素。取决于类型是否是一个复杂的XML结构,将类型节点序列化为XML字符串,然后为接收DOMDocument对象创建一个DOMDocumentFragment并将原始XML加载到这个DOMDocumentFramgnent中可能要容易得多。然后,您可以像添加DOMElement一样添加DOMDocumentFragment以插入类型XML数据。
正如jswolf19所指出的,您不能从文档中添加来自其他文档的节点:
DOM_WRONG_DOCUMENT_ERR
如果newnode不是从创建该节点的文档创建的,则会引发。