PHP - DOMDocument очищает div, не удаляя изображения

это мой текущий PHP-код:

$dom = new DOMDocument;
@$dom->loadHTML($file);

$xpath = new DOMXPath($dom);
$divs = $xpath->query('//div[@class = "test"]');
if ($divs->length > 0) {
    foreach ($divs as $key => $div) {
       print_r($div);
    }
}

В каждом div также есть изображение, которое я тоже хочу вывести, но DOMDocument его удаляет.

Изображения реализованы как в html файле:

<img src = "loading.gif" data-src = "https://test.com/images/images/120/1313131313232.jpg" alt = "test" />

Я хочу вывести значение data-src дополнительно к тексту в div.

Спасибо, С наилучшими пожеланиями

Вы запрашиваете div с классами, равными test, и этот тег img включает alt, равный test. Следовательно, не включен.

revo 13.12.2018 22:53

Поделитесь пожалуйста div[@class = "test"] html

Pedro Lobito 13.12.2018 23:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
137
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для каждого div вы можете использовать $div->getElementsByTagName("img") для получения изображения. Затем зациклите изображения, проверьте, является ли атрибут alt для img test, и получите атрибут data-src:

@$dom->loadHTML($file);
$xpath = new DOMXPath($dom);
$divs = $xpath->query('//div[@class = "test"]');
foreach ($divs as $key => $div) {
    echo $div->textContent . "<br>";
    foreach ($div->getElementsByTagName("img") as $img) {
        if ($img->getAttribute('alt') === 'test') {
            echo $img->getAttribute('data-src') . "<br>";
        }
    }
}

Демо

I want to output the value of data-src additionally to the text in the div.

Мне не известно о каком-либо "текст в div" в вашем вопросе.
Чтобы получить value из атрибута imgdata-src, вы можете использовать getAttribute('data-src'), то есть:

$html = <<< L
<img src = "loading.gif" data-src = "https://test.com/images/images/120/1313131313232.jpg" alt = "test" />
<img src = "loading.gif" data-src = "https://test.com/images/images/120/1313131313233.jpg" alt = "test" />
<img src = "loading.gif" data-src = "https://test.com/images/images/120/1313131313256.jpg" alt = "test" />
L;

$dom = new DOMDocument;
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$divs = $xpath->query('.//img[contains(@alt, "test")]'); # or query('.//img[contains(@src, "loading.gif")]');
foreach ($divs as $img) {
    print($img->getAttribute('data-src')."\n");
}

Вывод:

https://test.com/images/images/120/1313131313232.jpg
https://test.com/images/images/120/1313131313233.jpg
...

Демо PHP

Другие вопросы по теме