![](/img/trans.png)
[英]PHP DOMDocument : loadHTMLFile choking on a mysterious character: RS
[英]php domdocument exception loadHTMLFile
我的腳本中有一個奇怪的行為。 這讓我很困惑
腳本 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 function 的 position 會導致這樣的錯誤嗎? 謝謝
您已向 DOM ( div
) 添加了一個元素,然后嘗試加載要解析的文件並使用其 DOM 結構。
如果您打算使用文件,請先加載文件。
對於 DOM 操作,您不需要插入已經存在的元素,因此可以執行以下操作: $dom->appendChild($form)
僅在您使用$dom->getElementsByTag("form")->item(0)
拉取元素時重新插入相同的表單元素$dom->getElementsByTag("form")->item(0)
它成為它自己的 DOM object,您可以直接引用它和 append。 一個合適的例子是:
$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();
應該將 append 直接轉到他們從 DOM 中提取的 object 並首先加載文檔。
為了幫助您解決最初的問題:
new DOMDocument
可用於創建多個文檔。loadHTMLFile
創建 2 個DOMDocuments
之前使用DOMDocument::createElement
。DomDocument::createDocumentFragment
的行為相同並創建它自己的 DOM。 如果您想保持代碼相同並創建兩個DomDocuments
,那么您應該使用DomDocument::importNode
,例如:
$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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.