PHP的HTML DomDocument getElementById问题
这里有一点新的PHPparsing,但我似乎无法得到PHP的DomDocument返回显然是一个可识别的节点。 加载的HTML将来自'networking,所以不一定能保证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); ?>
尽pipe我没有收到任何错误,但我只收到以下内容:
object(DOMDocument)#1 (0) { } NULL
我应该不能查找<b>
标签,因为它确实有一个ID?
手册解释了为什么:
为了使这个function起作用,你需要用DOMElement-> setIdAttribute()来设置一些ID属性,或者用一个DTD来定义一个属性为IDtypes的属性。 在后面的例子中,在使用这个函数之前,需要使用DOMDocument-> validate()或者DOMDocument-> validateOnParse来validation文档。
通过一切手段,去有效的HTML和提供一个DTD。
快速修复:
- 调用
$dom->validate();
并提出错误(或解决它们),之后可以使用$dom->getElementById()
,无论出于某种原因的错误。 - 使用XPath,如果你不想要validing:
$x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
$x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
- 来想一想:如果你只是在加载HTML 之前设置
validateOnParse
为真,如果也可以工作; 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']"));