Задать вопрос
@Valentine5

PHP: Как с XPath получить родителя, нескольких детей из html и сохранить их порядок в DOM дереве?

Здравствуйте!

Спарсил html и пытаюсь разобрать его с помощью XPath

$html = file_get_contents($url);

//echo $html;

$document = new DOMDocument();

$document->loadHTML($html);

$xpath = new DOMXpath($document);

$elements = $xpath->query('//div[contains(@class,"versions")]');

echo '<pre>';
print_r($elements['elements']);
echo '<pre>';


С этим кодом у меня получается извлечь некоторые элементы родительского тега, но мне нужны также дети, с сохранением их порядка и привязкой к датам. Исходный html имеет такую структуру:
<div class='versions'>
<div>..</div>
<a class='versions-item'></a>
</div>


Почему-то из полученного дива versions я не могу открыть versions-item.. Делаю вот так:

$elements = $xpath->query('//div[contains(@class,"versions")]' and '//div[contains(@class,"versions-item")]');

Но я даже не вижу versions-item в консоли..

Может быть, у кого-то была похожая проблема? Подскажите, как с XPath получить и родителя и нужных детей с сохранением порядка (чтобы даты не потеряли привязку к ссылкам, даты лежат в другом диве).
  • Вопрос задан
  • 213 просмотров
Подписаться 2 Средний Комментировать
Решения вопроса 1
alekciy
@alekciy
Вёбных дел мастер
Одним XPath запросом ни как. Придется написать пару запросов: 1) получаем //div[contains(@class,"versions")] коллекцию узлов div которые делаем узлом контекста для 2) запроса //a[contains(@class,"versions-item")].

Код примерно такой будет:
$elements = $xpath->query('//div[contains(@class,"versions")]');
foreach ($elements as $contextNode) {
    $versionsItemNode = $xpath->query('//a[contains(@class,"versions-item")]', $contextNode);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы