Xpath查询返回NULL

时间:2016-10-06 08:35:13

标签: php html xpath

我正在尝试维护一些正在进行网页抓取的PHP代码。网页已经改变,所以需要更新,但我对Xpath不太熟悉,所以我很挣扎。

基本上这是相关的html部分

<div class="carousel-item-wrapper">
    <picture class="">
        <source srcset="/medias/tea-tree-skin-clearing-foaming-cleanser-1-640x640.jpg?context=product-images/h3b/hd3/8796813918238/tea-tree-skin-clearing-foaming-cleanser_1-640x640.jpg" media="(min-width: 641px) and (max-width: 1024)">
        <source srcset="/medias/tea-tree-skin-clearing-foaming-cleanser-1-320x320.jpg?context=product-images/h09/h9a/8796814049310/tea-tree-skin-clearing-foaming-cleanser_1-320x320.jpg" media="(max-width: 640px)">
        <img srcset="/medias/myimage.jpg" alt="150 ML" class="">
    </picture>
</div>

我正在尝试从IMG标记中提取srcset属性,该标记是“/medias/myimage.jpg”的值。我正在使用XPATH Helper chrome插件来帮助我,我有以下xpath;

//div[@class="carousel-item-wrapper"]/picture/img/@srcset

在插件中,它会返回我期望的内容,因此它似乎工作正常。

如果我还使用在线xpath测试器http://www.online-toolz.com/tools/xpath-editor.php,那么它也可以正常工作。

但在我的PHP代码中,我得到一个空值。

$dom = new DOMDocument();
    $dom->preserveWhiteSpace = false;
    $dom->strictErrorChecking = false;
    $dom->recover = true;

    @$dom->loadHtml($html);
    $xPath = new DOMXPath($dom);        

   //Other xPath queries executed OK.

    $node = $xPath->query('//div[@class="carousel-item-wrapper"]/picture/img/@srcset')->item(0);

    if ($node === NULL)
        writelog("Node is NULL");   // <-- Writes NULL to the log file!

我当然尝试了很多不同的变体,试图不指定属性名称等。但都没有运气。

我做错了什么?我敢肯定它一定很简单,但我无法发现它。

在同一HTML文档上使用我的PHP代码的其他提取工作正常。所以只是这个元素给我带来麻烦。

1 个答案:

答案 0 :(得分:1)

PHP的DOMXPath类似乎在使用自闭标签时遇到问题。如果您要查找自动关闭标记,则需要添加双正斜杠,因此新的xPath查询应为:

instanceof