Я пытался сделать это с "getElementsByTagName", но это не работало, я плохо знаком с использованием DOMDocument для парсинга HTML, когда я раньше использовал regex до вчерашнего дня, некоторый вид fokes здесь сказал мне, что DOMEDocument будет лучше для задания, таким образом, я дам ему попытку :)
Я гуглю вокруг некоторое время поиска некоторых, объясняет, но не нашел ничего, что помогло (не с классом так или иначе)
Таким образом, я хочу получить, "Получают этот текст 1", и "Получают этот текст 2" и так далее.
Не смотрит трудно, но я не могу понять это :(
<div class="main">
<div class="text">
Capture this text 1
</div>
</div>
<div class="main">
<div class="text">
Capture this text 2
</div>
</div>
Если вы хотите получить:
с class = "text"
- , который сам находится внутри
] с class = "main"
Я бы сказал, что самый простой способ - не использовать DOMDocument :: getElementsByTagName
- который вернет все теги с определенным name (пока вам нужны только некоторые из них) .
Вместо этого я бы использовал запрос 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)
52
ответ дан 29 November 2019 в 04:06
поделиться