【问题标题】:Perplexed by simple XPath bug对简单的 XPath 错误感到困惑
【发布时间】:2011-09-17 14:38:04
【问题描述】:
<?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 不是一种选择。

【问题讨论】:

    标签: php html dom xpath


    【解决方案1】:

    问题是您不能使用 DIV 元素代替 STYLE 元素,因此当您使用 loadHTML 时,它无法验证 HTML。如果你做了一个$doc-&gt;saveHTML();,你很快就会意识到它把&lt;div id="subhead"&gt; 包装在CDATA 中。

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

    $doc->loadXml($response);
    

    【讨论】:

    • 再次感谢!原来我还有另一个问题,但如果我不能解决它,我会作为一个新问题发布..
    • 在这里发布了 loadXML 的新问题:stackoverflow.com/questions/6393401/…
    • @babonk - 我为你的新问题提供了答案。
    【解决方案2】:

    loadHTML() 期望在字符串中找到 HTML,但那不是有效的 HTML,因此无法正确加载字符串。 XPath 将没有要访问的 &lt;div&gt; 元素。请改用loadXML()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多