这里的PHP解析有点新,但是我似乎无法让PHP的DomDocument返回显然是可识别的节点。加载的HTML将来自“ .net”,因此不一定能保证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吗?
<b>
该手册解释了为什么:
为了使此功能起作用,您将需要使用DOMElement->setIdAttribute()设置一些ID属性,或者将DTD定义为ID类型的属性。在后一种情况下,在使用此功能之前,您需要使用DOMDocument->validate()或DOMDocument-> validateOnParse来验证文档。
一定要使用有效的HTML并提供DTD。
快速修复:
$dom->validate();
$dom->getElementById()
$x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
validateOnParse
。
$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;
在此处输出“世界”。