如何解决PHP HTML DomDocument getElementById问题
该手册解释了为什么:
为了使此功能起作用,您将需要使用DOMElement->setIdAttribute()设置一些ID属性,或者将DTD定义为ID类型的属性。在后一种情况下,在使用此功能之前,您需要使用DOMDocument->validate()或DOMDocument-> validateOnParse来验证文档。
一定要使用有效的HTML并提供DTD。
快速修复:
- 致电
$dom->validate();
并忍受错误(或修复错误),之后您可以使用$dom->getElementById()
,无论出于何种原因出现错误。 - 如果您不想验证,请使用XPath:
$x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
- 想一想:如果 *
。
$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;
在此处输出“世界”。
解决方法
这里的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吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。