簡體   English   中英

php domdocument 異常 loadHTMLFile

[英]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 並首先加載文檔。
為了幫助您解決最初的問題:

  • Append 直接指向您拉取的元素,因為它引用了 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM