Я пытался сделать это с помощью «getElementsByTagName», но он не работал, я новичок в использовании DOMDocument для синтаксического анализа HTML, поскольку я использовал регулярное выражение до вчерашнего дня, когда-то вроде фокусов, сказал мне, что DOMEDocument будет лучше для работа, поэтому я даю ему попробовать 🙂
Я google вокруг некоторое время, ища некоторые объяснения, но не нашел ничего, что помогло (не с классом в любом случае)
Поэтому я хочу захватить «Capture this text 1» и «Capture this text 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>
Если вы хотите получить:
<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)
Вы можете использовать http://simplehtmldom.sourceforge.net/
Это простой и простой в использовании парсер DOM, написанный на php, с помощью которого вы можете легко получить содержимое тега div.
Что-то вроде этого:
// Find all <div> which have attribute id=text $ret = $html->find('div[id=text]');
См. Документацию для получения дополнительной справки.