首页 > 解决方案 > php xpath如何从父元素内的多个元素中获取值

问题描述

我需要从特定站点收集所有这些数据。我需要 URL、图像、文本。这是我尝试使用的代码。但我需要从页面上的所有标签中收集所有信息。

<article>
    <a href="http://www.link.com">
      <div><img src="https://image.com/image.png" /></div>
      <div>History</div>
      <div><h3>Content Here.</h3></div>
</article>
<article>
    <a href="http://www.link.com">
      <div><img src="https://image.com/image.png" /></div>
      <div>History</div>
      <div><h3>Content Here.</h3></div>
</article>
<article>
    <a href="http://www.link.com">
      <div><img src="https://image.com/image.png" /></div>
      <div>History</div>
      <div><h3>Content Here.</h3></div>
</article>

php代码

$html = file_get_contents($feed_url);
        $dom = new DOMDocument();
        @$dom->loadHTML($html);
        $xpath = new DomXPath($dom);
        $articles = $xpath->query("//article");
        $items = array();

        foreach($articles as $article) {
                $link = $xpath->query("//a/@href", $article);
                $img = $xpath->query("//img/@src", $article);
                $link = $xpath->query("//h3", $article);
        }

我似乎无法让它返回任何值。我可以通过 foreach 得到一个值。但我也需要所有其他人。我无法完全弄清楚如何做到这一点。任何帮助将不胜感激。

标签: phpdomxpath

解决方案


如果我foreach像这样改变你的循环:

foreach($articles as $article) {
        $link = $xpath->query(".//a/@href", $article);
        $img = $xpath->query(".//img/@src", $article);
        $head = $xpath->query(".//h3", $article);
        echo $link[0]->nodeValue . "  ". $img[0]->nodeValue  . "  ". $head[0]->nodeValue . "\n";
}

我将其作为输出(我在元素中添加了数字只是为了区分树<article>节点:

http://www.link1.com  https://image.com/image1.png  Content1 Here.
http://www.link2.com  https://image.com/image2.png  Content2 Here.
http://www.link3.com  https://image.com/image3.png  Content3 Here.

那是你要找的吗?


推荐阅读