加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP HTML DomDocument getElementById问题

发布时间:2020-12-13 18:10:47 所属栏目:PHP教程 来源:网络整理
导读:这里的 PHP解析有点新,但我似乎无法让 PHP的DomDocument返回显然是可识别的节点.加载的HTML将来自’net,因此无法保证XML合规性,但我尝试以下方法: ?phpheader("Content-Type: text/plain");$html = 'htmlbodyHello b id="bid"World/b./body/html';$dom = ne
这里的 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?

The Manual解释了原因:

For this function to work,you will need either to set some ID attributes with DOMElement->setIdAttribute() or a DTD which defines an attribute to be of type ID. In the later case,you will need to validate your document with DOMDocument->validate() or DOMDocument->validateOnParse before using this function.

无论如何,请使用有效的HTML&提供DTD.

快速修复:

>拨打$dom-> validate();并忍受错误(或修复它们),之后您可以使用$dom-> getElementById(),无论出于某种原因的错误.
>如果你不喜欢validing,请使用XPath:$x = new DOMXPath($dom); $el = $x-> query(“// * [@ id =’bid’]”) – > item(0);
>想一想:如果你只是在加载HTML之前将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;

在这里输出’世界’.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读