使用XPath提取含PRODUCT_LEAD字符串的img标签src属性值问题
问题原因
- XPath查询的节点错误:你写的
//*[@class="slide__image"]匹配的是<div class="slide__image">容器节点,不是它的子元素img标签,div本身没有src属性,调用getAttribute('src')必然返回空值。 - 变量覆盖问题:你的
$imgurl在循环中每次被重新赋值,就算逻辑正确最终也只会保留最后一个节点的属性值,而代码里最后一个slide的img src刚好不含PRODUCT_LEAD,所以最终输出为空。
解决方法
推荐直接优化XPath语句,一步查询到符合要求的img节点,无需额外循环过滤,代码更高效:
$doc = new DOMDocument; $doc->preserveWhiteSpace = false; $doc->strictErrorChecking = false; $doc->recover = true; libxml_use_internal_errors(true); $doc->loadHTML($pageBody); $xpath = new \DOMXPath($doc); // 直接定位slide__image下、src包含PRODUCT_LEAD的img节点 $targetImgs = $xpath->query('//div[@class="slide__image"]/img[contains(@src, "PRODUCT_LEAD")]'); $imgUrls = []; foreach ($targetImgs as $img) { $imgUrls[] = $img->getAttribute('src'); // 如果需要高清大图,可以取data-zoom-image属性:$img->getAttribute('data-zoom-image') } dd($imgUrls);
如果只需要第一个匹配的链接,无需循环,直接取值即可:
$firstLeadImg = $targetImgs->item(0)?->getAttribute('src'); dd($firstLeadImg);
内容的提问来源于stack exchange,提问作者Devin Y
相关产品推荐
相关产品推荐

