[英]PHP HTML DOMDocument getElementById problems
這里對 PHP 解析有點新,但我似乎無法讓 PHP 的 DOMDocument 返回明顯可識別的節點。 加載的 HTML 將來自“網絡”,因此不一定保證符合 XML,但我嘗試以下操作:
<?php
header("Content-Type: text/plain");
$html = '<html><body>Hello <b id="bid">World</b>.</body></html>';
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->validateOnParse = true;
/*** load the html into the object ***/
$dom->loadHTML($html);
var_dump($dom);
$belement = $dom->getElementById("bid");
var_dump($belement);
?>
雖然我沒有收到任何錯誤,但我只收到以下輸出:
object(DOMDocument)#1 (0) {
}
NULL
我是否應該無法查找<b>
標簽,因為它確實有一個 id?
手冊解釋了原因:
要使此函數工作,您需要使用 DOMElement->setIdAttribute() 或 DTD 設置一些 ID 屬性,該 DTD 將屬性定義為 ID 類型。 在后一種情況下,在使用此函數之前,您需要使用 DOMDocument->validate() 或 DOMDocument->validateOnParse 驗證您的文檔。
無論如何,選擇有效的 HTML 並提供 DTD。
快速修復:
$dom->validate();
並忍受錯誤(或修復它們),之后您可以使用$dom->getElementById()
,而不管出於某種原因的錯誤。$x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
$x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
validateOnParse
設置為 true,那么 if 也可以工作;P.
$dom = new DOMDocument();
$html ='<html>
<body>Hello <b id="bid">World</b>.</body>
</html>';
$dom->validateOnParse = true; //<!-- this first
$dom->loadHTML($html); //'cause 'load' == 'parse
$dom->preserveWhiteSpace = false;
$belement = $dom->getElementById("bid");
echo $belement->nodeValue;
在此處輸出“世界”。
好吧,你應該檢查是否$dom->loadHTML($html);
返回 true(成功),我會嘗試
var_dump($belement->nodeValue);
輸出以獲得可能出錯的線索。
編輯: http : //www.php-editors.com/php_manual/function.domdocument-get-element-by-id.html - 似乎 DOMDocument 在內部使用 XPath。
例子:
$xpath = xpath_new_context($dom);
var_dump(xpath_eval_expression($xpath, "//*[@ID = 'YOURIDGOESHERE']"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.