Ответ 1
Если вы хотите получить:
- Текст
- что внутри тега
<div>
сclass="text"
- а именно, внутри
<div>
сclass="main"
Я бы сказал, что самый простой способ - не использовать DOMDocument::getElementsByTagName
- который вернет все теги, которые имеют определенное имя (пока вы хотите только некоторые из них).
Вместо этого я бы использовал запрос XPath в вашем документе, используя класс DOMXpath
.
Например, что-то вроде этого должно делать, чтобы загрузить HTML-строку в объект DOM и экземпляр класса DOMXpath
:
$html = <<<HTML
<div class="main">
<div class="text">
Capture this text 1
</div>
</div>
<div class="main">
<div class="text">
Capture this text 2
</div>
</div>
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
И тогда вы можете использовать запросы XPath, используя метод DOMXPath::query
, который возвращает список элементов, которые вы искали:
$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
var_dump(trim($tag->nodeValue));
}
И выполнение этого дает мне следующий результат:
string 'Capture this text 1' (length=19)
string 'Capture this text 2' (length=19)