Получение первых изображений рядом с идентификатором с помощью 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'). ": ";
  }
}

1 ответ

Я думаю, что вы можете использовать запрос DOMXPath с этим выражением xpath:

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

Это получит следующие братья img для <ul class="foobar"> используя следующий брат и затем получить первый элемент.

$image имеет тип DOMElement.

В этом примере я использовал loadHTML, чтобы загрузить HTML из строки $source, Если вы хотите загрузить 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);
Другие вопросы по тегам