Разбор HTML с HTML-кодом HTML DOMDocument

Я пытался сделать это с помощью «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]'); 

См. Документацию для получения дополнительной справки.