0

我正在从 webapge 获取特定值;h1 标签中的产品名称:

<div id="extendinfo_container">
  <a href="/someproduct.html"><h1><strong>Product Name</strong></h1></a>
  <div style="font-size:0;height:4px;"></div>
  <p class="text_breadcrumbs">
  <a href="/Our-Brands.html" target="_self"><img src="arrow_091.gif" align="absmiddle"/></a>
  <a href="/someproduct.html" target="_self" class="link_breadcrumbs">Product Name</a><img src="arrow_091.gif" align="absmiddle"/>
  <strong>Product Name</strong>
  <div class="dotted_line_blue">
    <img src="theme_shim.gif" height="1" width="100%" alt=" " />
  </div>
</div>

这是一个结构很差的网站,有多个 h1,所以我不能简单地做 getElementById('h1')。

我想尽可能具体地了解我得到的元素,这是我拥有的代码:

$doc = new DOMDocument();
@$doc->loadHTML(file_get_contents('http://url/to/website'));

// locate <div id="extendinfo_container"><a><h1><strong>(.*)</strong></h1></a> as product name
$x = new DOMXPath($doc);
$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong');
var_dump($pName->nodeValue);

这是回报null。我需要使用什么查询来获取我想要的内容?

4

3 回答 3

1

query()返回 a DOMNodeList,它没有nodeValue属性。您必须选择一个元素(即第一个元素):

$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong')->item(0);

或者迭代它:

foreach( $pName as $el) {
    var_dump( $el->nodeValue);
}

其中任何一个都可以让您访问 a DOMNode,这就是您正在寻找的东西。

于 2012-07-20T14:28:04.040 回答
0

PHP 的 DOM对加载到其中的 html非常挑剔。它会呕吐并拒绝加载即使是格式不正确的文档。

关闭错误抑制(@$doc->loadHTML,删除@)并确保它没有在您尝试分析的页面上出现。否则,您的 XPath 查询看起来很好,并且如果文档确实被正确加载/解析,它应该可以工作。

于 2012-07-20T14:27:58.580 回答
0

查询工作正常。我访问的值错误。这是访问该值的正确方法:

var_dump($pName->item(0)->nodeValue);

于 2012-07-20T14:30:11.013 回答