PHP HTML DomDocument getElementById问题

这里的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吗?

回答:

该手册解释了为什么:

为了使此功能起作用,您将需要使用DOMElement->setIdAttribute()设置一些ID属性,或者将DTD定义为ID类型的属性。在后一种情况下,在使用此功能之前,您需要使用DOMDocument->validate()或DOMDocument-> validateOnParse来验证文档。

一定要使用有效的HTML并提供DTD。

快速修复:

  1. 致电$dom->validate();并忍受错误(或修复错误),之后您可以使用$dom->getElementById(),无论出于何种原因出现错误。
  2. 如果您不想验证,请使用XPath: $x = new DOMXPath($dom); $el = $x->query("//*[@id='bid']")->item(0);
  3. 想一想:如果 只是将其设置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;

在此处输出“世界”。

以上是 PHP HTML DomDocument getElementById问题 的全部内容, 来源链接: utcz.com/qa/409747.html

回到顶部