简单的XPath错误困惑

时间:2011-06-18 01:34:55

标签: php html dom xpath

<?php
$response = 
'<style><div id="subhead"></div></style>';
//echo $response;

$doc = new DOMDocument();

$doc->loadHTML($response);  

$finder = new DomXPath($doc);

$term_select = $finder->query('//div[@id="subhead"]');

var_dump($term_select->item(0));

?>

var_dump得到NULL,我在第8行也得到了这个警告:

Warning: DOMDocument::loadHTML(): Unexpected end tag : div in Entity, line: 1 on line 8

请注意,这不是我的HTML(我正在抓取),因此无法更改HTML。

2 个答案:

答案 0 :(得分:2)

loadHTML()期望在字符串中找到HTML,但这不是有效的HTML,因此字符串无法正确加载。 XPath不会有<div>个元素。请改为loadXML()

答案 1 :(得分:2)

问题是您不能使用DIV元素而不是STYLE元素,所以当您使用loadHTML时,它无法验证HTML。如果您执行$doc->saveHTML();,您很快就会意识到它将<div id="subhead">包裹在CDATA中。

要解决此问题,请改用loadXML()

$doc->loadXml($response);