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

时间:2015-12-31 05:35:23

标签: php html dom domdocument domxpath

 <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'). ": ";
  }
}

1 个答案:

答案 0 :(得分:0)

我认为您可以将DOMXPath query与此xpath表达式一起使用:

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

这将使用following-sibling<ul class="foobar">获取以下img兄弟,然后获取第一项。

$image的类型为DOMElement

在此示例中,我使用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);