这里的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);
?>
Run Code Online (Sandbox Code Playgroud)
虽然我没有收到任何错误,但我只收到以下输出:
object(DOMDocument)#1 (0) {
}
NULL
Run Code Online (Sandbox Code Playgroud)
我是否应该无法查找<b>标签,因为它确实有ID?
Wri*_*ken 19
手册解释了原因:
要使此功能起作用,您需要使用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);validateOnParse为true ,那么它也会起作用; 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;
Run Code Online (Sandbox Code Playgroud)
在这里输出'世界'.
| 归档时间: |
|
| 查看次数: |
30876 次 |
| 最近记录: |