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