使用 DOMXpath::query 获取 id 旁边的第一个图像


getting first images next to id with DOMXpath::query

 <span class="byline">
 <ul class="foobar"></ul>
 <img alt="" src="resize_image.php?src=images/newsManagement/87600069ef0dffad5fd02f862ea3787b.jpg&w=675&h=675">
 <p style="text-align: justify;">
 <img alt="" src="resize_image.php?src=images/newsManagement/87600069ef0dffad5fd02f862ea3787b.jpg&w=675&h=675">
 <hr>

嗨,这是我的 html。 我可以使用 DOMDocument 获取所有图像,但我想获得ul.foobar课后的第一个图像。我不想要其他图像。我该如何查询。

我为所有图像尝试了这个。

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($url);
//$xpath = new DomXpath($doc);
//$entries = $xpath->query("//div[@id='newsbox']/ul[@class='foobar']");
$elements = $dom->getElementsByTagName('img');
if (!is_null($elements)) {
  foreach ($elements as $element) {
    echo "<br/>". $element->getAttribute('src'). ": ";
  }
}

我认为您可以将 DOMXPath 查询与这个 xpath 表达式一起使用:

$image = $xpath->query('//ul[@class="foobar"]/following-sibling::img')->item(0);

这将使用以下同级获取以下 img 同级<ul class="foobar">,然后获取第一项。

$image是圆顶类型。

在此示例中,我使用 loadHTML 从字符串$source加载 html。如果你想从文件加载你的html,你可以使用loadHTMLFile。

$source = <<<SOURCE
<span class="byline">
 <ul class="foobar"></ul>
 <img alt="" src="resize_image.php?src=images/newsManagement/87600069ef0dffad5fd02f862ea3787b.jpg&w=675&h=675">
 <p style="text-align: justify;">
 <img alt="" src="resize_image.php?src=images/newsManagement/87600069ef0dffad5fd02f862ea3787b.jpg&w=675&h=675">
 <hr>
SOURCE;
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($source);
$xpath = new DomXpath($dom);
$image = $xpath->query('//ul[@class="foobar"]/following-sibling::img')->item(0);