0

我正在尝试从页面中提取所有相关的 URL 和图像并将它们放入一个数组中,下面的代码工作正常,除了它一遍又一遍地输出第一对数字正确的次数。我想也许我在指定 XPATH 时犯了错误,但我已经在 3 个不同的站点上对其进行了测试,每次都得到相同的结果。

$dom = new DOMDocument();
$dom->loadHtml( $html );
$xpath = new DOMXPath( $dom );

$items = $xpath->query( "//div[@class=\"row\"]" );

foreach ( $items as $item ) {

$value['url'] = $xpath->query( "//div[@class=\"productImg\"]/a/@href",$item)->item(0)->nodeValue;

$value['img'] = $xpath->query("//div[@class=\"productImg\"]/a/img/@src",$item)->item(0)->nodeValue;

$result[] = $value;


}

print_r($result);

显然代码不正确,但我无法将其缩小到有问题的部分。在有人建议使用正则表达式之前,这是我通常会做的事情,但如果可能的话,我现在更喜欢使用 XPATH。

4

2 回答 2

1

鉴于query("//div[@class=\"productImg\"]/a/img/@src",$item)您似乎想要执行对于$item. 你就快到了,只是不完全。

您的查询以 which 开头,//div这意味着查找作为文档根的后代并满足查询剩余部分的任何<div>节点。如前所述,您遇到的关键地方是该表达式来自文档根目录。

为了选择上下文节点,您应该以匹配上下文节点后代的任何节点(即您的.)开始表达式。.//div<div>$item

于 2010-08-23T19:40:27.053 回答
0

关于您的 HTML 的外观有太多假设,但是,我可以立即发现的一个问题是 ->item(0) 部分。该 0 需要反映有问题的迭代。

假设 $items 总是有数字键:

foreach( $items as $key => $item ) {
 .....项目)->项目($键)->节点值;
}
于 2010-08-23T17:07:04.000 回答