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


$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不是从创建该节点的文档创建的,则会引发。

最新更新