как использовать dom php parser

Я новичок в разборе DOM в PHP:
У меня есть файл HTML, который я пытаюсь проанализировать. У этого есть куча DIVs, как это:

<div id="interestingbox"> <div id="interestingdetails" class="txtnormal"> <div>Content1</div> <div>Content2</div> </div> </div> <div id="interestingbox"> ...... 

Я пытаюсь получить содержимое многих полей div, используя php. Как я могу использовать парсер DOM для этого?

Благодаря!

Solutions Collecting From Web of "как использовать dom php parser"

Сначала я должен сказать вам, что вы не можете использовать один и тот же идентификатор на двух разных div; для этого есть классы. Каждый элемент должен иметь уникальный идентификатор.

Код для получения содержимого div с id = "interestingbox"

 $html = ' <html> <head></head> <body> <div id="interestingbox"> <div id="interestingdetails" class="txtnormal"> <div>Content1</div> <div>Content2</div> </div> </div> <div id="interestingbox2"><a href="#">a link</a></div> </body> </html>'; $dom_document = new DOMDocument(); $dom_document->loadHTML($html); //use DOMXpath to navigate the html with the DOM $dom_xpath = new DOMXpath($dom_document); // if you want to get the div with id=interestingbox $elements = $dom_xpath->query("*/div[@id='interestingbox']"); if (!is_null($elements)) { foreach ($elements as $element) { echo "\n[". $element->nodeName. "]"; $nodes = $element->childNodes; foreach ($nodes as $node) { echo $node->nodeValue. "\n"; } } } //OUTPUT [div] { Content1 Content2 } 

Пример с классами:

 $html = ' <html> <head></head> <body> <div class="interestingbox"> <div id="interestingdetails" class="txtnormal"> <div>Content1</div> <div>Content2</div> </div> </div> <div class="interestingbox"><a href="#">a link</a></div> </body> </html>'; //the same as before.. just change the xpath [...] $elements = $dom_xpath->query("*/div[@class='interestingbox']"); [...] //OUTPUT [div] { Content1 Content2 } [div] { a link } 

Более подробную информацию см. На странице DOMXPath .

Я получил это, чтобы работать с использованием simplehtmldom в начале:

 $html = file_get_html('example.com'); foreach ($html->find('div[id=interestingbox]') as $result) { echo $result->innertext; } 

Очень хорошая функция от http://www.sitepoint.com/forums/showthread.php?611393-php5-need-something-like-innerHTML-instead-of-nodeValue

 function innerXML($node) { $doc = $node->ownerDocument; $frag = $doc->createDocumentFragment(); foreach ($node->childNodes as $child) { $frag->appendChild($child->cloneNode(TRUE)); } return $doc->saveXML($frag); } $dom = new DOMDocument(); $dom->loadXML(' <html> <body> <table> <tr> <td id="foo"> The first bit of Data I want <br />The second bit of Data I want <br />The third bit of Data I want </td> </tr> </table> <body> <html> '); $xpath = new DOMXPath($dom); $node = $xpath->evaluate("/html/body//td[@id='foo' ]"); $dataString = innerXML($node->item(0)); $dataArr = explode("<br />", $dataString); $dataUno = $dataArr[0]; $dataDos = $dataArr[1]; $dataTres = $dataArr[2]; echo "firstdata = $nameUno<br />seconddata = $nameDos<br />thirddata = $nameTres<br />" 

WebExtractor: https://github.com/knyga/webextractor. Он может анализировать страницу с помощью селекторов css, regex, xpath.

Посмотрите пакет и тесты для примеров:

использовать WebExtractor \ DataExtractor \ DataExtractorFactory; использовать WebExtractor \ DataExtractor \ DataExtractorTypes; использовать WebExtractor \ Client \ Client;

$ factory = DataExtractorFactory :: getFactory (); $ extractor = $ factory-> createDataExtractor (DataExtractorTypes :: CSS); $ client = новый клиент; $ content = $ client-> get (' https://en.wikipedia.org/wiki/2014_Winter_Olympics '); $ Extractor-> setContent ($ содержание); $ h1 = $ extractor-> setSelector ('h1') -> extract ();