Это тот случай, когда нужно выбрать отдельные элементы из XML, начиная с каждого полученного $item
.
Используя DOMDocument, проще придерживаться выражений XPath, но с помощью descendant::
убедитесь, что искомые узлы находятся в начальном элементе, который указан в качестве третьего параметра для evaluate()
.В качестве каждой точки вам нужно строковое значение - я использовал evaluate('string(...))
, так как это вернет строку, тогда как query()
вернет DOMNodeList, который вам затем нужно будет обработать.
Я надеюсь, что XPath имеет смыслУчитывая вышесказанное, единственной странностью является СОДЕРЖАНИЕПоскольку это следующий узел (а не дочерний узел), я использую following-sibling::
для доступа к нему.
$items = $xpath->query('//div[@class="card"]');
foreach ($items as $item) {
$title = $xpath->evaluate('string(descendant::*//a[@class="text-number"])', $item);
$link = $xpath->evaluate('string(descendant::div[@class="d-flex"][1]/h5/a/@href)', $item);
$title = $xpath->evaluate('string(descendant::div[@class="d-flex"][1]/h5/a)', $item);
$autor = $xpath->evaluate('string(descendant::div[@class="d-flex"][2]/strong)', $item);
$randomNumber = $xpath->evaluate('string(descendant::div[@class="d-flex"][2]/span)', $item);
$time = $xpath->evaluate('string(descendant::div[@class="d-flex"][2]/time)', $item);
$content = $xpath->evaluate('string(following-sibling::*//div[@class="card-text"])', $item);
echo $title."/".$link."/".$title."/".$autor."/".$randomNumber.
"/".$time."/".$content.PHP_EOL;
}
Для получения дополнительной информации о таких вещах, как descendant::
и following-sibling::
, они являются осями XPath, которыео здесь .