php domdocument异常loadHTMLFile

时间:2011-06-10 05:34:14

标签: php domdocument fatal-error

我的脚本中有奇怪的行为。这让我很困惑

脚本1。

$dom = new DOMDocument();
$dom->loadHTMLFile("html/signinform.html");//loads file here
$form = $dom->getElementsByTagName("form")->item(0);
$div = $dom->createElement("div");
$dom->appendChild($div)->appendChild($form);
echo $dom->saveHTML();

脚本2。

$dom = new DOMDocument();
$div = $dom->createElement("div");
$dom->loadHTMLFile("html/signinform.html");//loads file here
$form = $dom->getElementsByTagName("form")->item(0);
$dom->appendChild($div)->appendChild($form);
echo $dom->saveHTML();

脚本1 无问题。它显示了表单。但脚本2 会抛出以下错误:致命错误:未捕获的异常'DOMException',并在C:\ Users

中显示错误的文档错误

有人可以向我解释为什么仅仅改变loadHTMLFile函数的位置会导致这样的错误吗?感谢

2 个答案:

答案 0 :(得分:1)

您已向DOM添加了一个元素(div),然后尝试加载要解析的文件并使用其DOM结构。

如果您打算使用文件,请先加载文件。

答案 1 :(得分:0)

对于DOM操作,您不需要插入已存在的元素,所以执行以下操作:$dom->appendChild($form)只重新插入相同的表单元素,当您使用$dom->getElementsByTag("form")->item(0)拉取元素时,它就变成了自己的DOM您可以直接引用并附加到的对象。一个恰当的例子是:

$dom = new DOMDocument();
$dom->loadHTMLFile("assets/dom_document-form.html");
$div = $dom->createElement("div");
$form = $dom->getElementsByTagName("form")->item(0);
$form->appendChild($div);
echo $dom->saveHTML();

应该直接附加到从DOM中提取的对象,然后首先加载文档。
为了帮助您解决初步问题:

  • 直接附加到您引用该对象时拉出的元素。
  • new DOMDocument可用于创建多个文档。
  • DOMDocument::createElement之前使用loadHTMLFile创建2 DOMDocuments
  • 使用DomDocument::createDocumentFragment行为相同并创建自己的DOM。

如果您希望保持代码相同并创建两个DomDocuments,那么您应该使用DomDocument::importNode,例如:{/ p>

$dom = new DOMDocument();
$div = $dom->createElement("div");
$dom->loadHTMLFile("assets/dom_document-form.html");
$node = $dom->importNode($div);
$form = $dom->getElementsByTagName("form")->item(0);
$form->appendChild($node);
echo $dom->saveHTML();