我的脚本中有奇怪的行为。这让我很困惑
脚本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函数的位置会导致这样的错误吗?感谢
答案 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();