我正在尝试从页面中提取所有相关的URL和图像,并将它们放入一个数组中,下面的代码运行良好,只是它一遍又一遍地输出第一个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。
发布于 2010-08-24 03:40:27
给定query("//div[@class=\"productImg\"]/a/img/@src",$item),看起来您想要执行一个与$item相关的查询。你已经很接近了,只是还不够。
查询以//div开始,这意味着要查找作为文档根目录的后代的任何<div>节点,并满足查询的其余部分。正如前面提到的,关键之处在于该表达式来自文档根目录。
为了选择上下文节点,您应该以.开头表达式,以便.//div将匹配上下文节点的任何后代<div>节点(即您的$item)。
https://stackoverflow.com/questions/3544241
复制相似问题