我追踪来自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
。我需要使用什么查询来获取我想要的内容?
答案 0 :(得分:1)
query()
返回DOMNodeList
,其中没有nodeValue
属性。你必须选择一个元素(即第一个):
$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong')->item(0);
或迭代它:
foreach( $pName as $el) {
var_dump( $el->nodeValue);
}
其中任何一个都可以让您访问DOMNode
,这是您正在寻找的。 p>
答案 1 :(得分:0)
PHP的DOM 非常挑剔你加载到它的html。它会barf并拒绝加载即使是略有格式错误的文档。
关闭错误抑制(@$doc->loadHTML
,删除@
),并确保您在此页面上没有尝试分析。否则,您的XPath查询看起来很好,如果文档确实被正确加载/解析,它应该工作。
答案 2 :(得分:0)
查询工作正常。我正在访问错误的价值。以下是访问该值的正确方法:
var_dump($pName->item(0)->nodeValue);