DOMDocument в php

Я только что начал читать документацию и примеры о DOM, чтобы выполнить сканирование и анализ документа.

Например, у меня есть часть документа, показанного ниже:

<div id="showContent"> <table> <tr> <td> Crap </td> </tr> <tr> <td width="172" valign="top"><a href="link"><img height="91" border="0" width="172" class="" src="img"></a></td> <td width="10">&nbsp;</td> <td valign="top"><table cellspacing="0" cellpadding="0" border="0"> <tbody><tr> <td height="30"><a class="px11" href="link">title</a><a><br> <span class="px10"></span> </a></td> </tr> <tr> <td><img height="1" width="580" src="crap"></td> </tr> <tr> <td align="right"> <a href="link"><img height="16" border="0" width="65" src="/buy"></a> </td> </tr> <tr> <td valign="top" class="px10"> <p style="width: 500px;">description.</p> </td> </tr> </tbody></table></td> </tr> <tr> <td> Crap </td> </tr> <tr> <td> Crap </td> </tr> </table> </div> 

Я пытаюсь использовать следующий код, чтобы получить все тэг-теги и проанализировать, есть ли в нем дерьмо или информация:

 $dom = new DOMDocument(); @$dom->loadHTML($html); $xpath = new DOMXPath($dom); $tags = $xpath->query('.//div[@id="showContent"]'); foreach ($tags as $tag) { $string=""; $string=trim($tag->nodeValue); if(strlen($string)>3) { echo $string; echo '<br>'; } } 

Однако я получаю только стесненную строку без тегов, например:

 Crap Crap Title Description 

Но я хотел бы получить:

 <tr> <td>Crap</td> </tr> <tr> <a href="link">title</a> </tr> 

Как сохранить html-узлы (теги)?

Solutions Collecting From Web of "DOMDocument в php"

Если вы хотите работать с DOM, вам нужно понять концепцию. Все в документе DOM, включая DOMDocument, является узлом.

DOMDocument – иерархическая древовидная структура узлов. Он начинается с корневого узла. У этого корневого узла могут быть дочерние узлы, и все эти дочерние узлы могут иметь дочерние узлы самостоятельно. В основном все в DOMDocument – это тип узла определенного типа, будь то элементы, атрибуты или текстовое содержимое.

  HTML Legend: / \ UPPERCASE = DOMElement HEAD BODY lowercase = DOMAttr / \ "Quoted" = DOMText TITLE DIV - class - "header" | \ "The Title" H1 | "Welcome to Nodeville" 

На приведенной выше диаграмме показан DOMDocument с некоторыми узлами. Существует корневой элемент (HTML) с двумя дочерними элементами (HEAD и BODY). Соединительные линии называются осями. Если вы будете следовать по оси до элемента TITLE, вы увидите, что у него есть один лист DOMText. Это важно, потому что это иллюстрирует часто забытую вещь:

 <title>The Title</title> 

не один, а два узла. DOMElement с дочерним элементом DOMText. Аналогично, это

 <div class="header"> 

на самом деле три узла: DOMElement с DOMAttr, содержащим DOMText. Поскольку все это наследует их свойства и методы от DOMNode, важно ознакомиться с классом DOMNode.

На практике это означает, что выбранный вами DIV связан со всеми другими узлами документа. Вы могли бы пройти весь путь до корневого элемента или до листьев в любое время. Это все. Вам просто нужно запросить или пересечь документ для необходимой информации.

childNodes ли вы это путем итерации childNodes из DIV или используйте getElementByTagName() или XPath зависит от вас. Вам просто нужно понять, что вы не работаете с необработанным HTML, а с узлами, представляющими весь HTML-документ.

Если вам нужна помощь в извлечении определенной информации из документа, вам необходимо уточнить, какую информацию вы хотите извлечь из нее. Например, вы можете спросить, как получить все ссылки из таблицы, а затем мы могли бы ответить на что-то вроде:

 $div = $dom->getElementById('showContent'); foreach ($div->getElementsByTagName('a') as $link) { echo $dom->saveXML($link); } 

Но если вы не более конкретны, мы можем только догадываться, какие узлы могут быть релевантными.

Если вам нужно больше примеров и фрагментов кода о том, как работать с DOM, просмотрите мои предыдущие ответы на связанные вопросы:

К настоящему моменту должен быть фрагмент для каждого базового и среднего UseCase, который у вас может быть с DOM.

Чтобы создать парсер, вы можете использовать htmlDOM .

Это простой и простой в использовании парсер DOM, написанный на php. Используя его, вы можете легко получить содержимое тега div .

Например, найдите все теги div которых есть атрибут id со значением text .

 $ret = $html->find('div[id=text]');