savexml ejemplo php xml-parsing html-parsing domdocument

ejemplo - save domdocument php



DOMDocument en php (2)

Acabo de comenzar a leer documentación y ejemplos sobre DOM, para rastrear y analizar el documento.

Por ejemplo, tengo parte del documento que se muestra a continuación:

<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>

Intento usar el siguiente código para obtener todas las etiquetas tr y analizar si hay basura o información dentro de ellas:

$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>''; } }

Sin embargo, estoy obteniendo cadenas sin las etiquetas, por ejemplo:

Crap Crap Title Description

Pero me gustaría obtener:

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

¿Cómo mantener nodos html (etiquetas)?


Para crear un analizador, puede usar htmlDOM .

Es muy fácil de usar el analizador DOM escrito en php. Al usarlo, puede obtener fácilmente el contenido de la etiqueta div .

Por ejemplo, encuentre todas las etiquetas div que tengan id atributo con un valor de text .

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


Si quieres trabajar con DOM, tienes que entender el concepto. Todo en un documento DOM, incluido DOMDocument, es un nodo.

DOMDocument es una estructura de árbol jerárquica de nodos. Comienza con un nodo raíz. Ese nodo raíz puede tener nodos secundarios y todos estos nodos secundarios pueden tener nodos secundarios por sí solos. Básicamente todo en un DOMDocument es un tipo de nodo de algún tipo, ya sea elementos, atributos o contenido de texto.

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

El diagrama de arriba muestra un DOMDocument con algunos nodos. Hay un elemento raíz (HTML) con dos hijos (HEAD y BODY). Las líneas de conexión se llaman ejes. Si sigues el eje hacia el elemento TITLE, verás que tiene una hoja DOMText. Esto es importante porque ilustra una cosa que a menudo se pasa por alto:

<title>The Title</title>

no es uno, sino dos nodos. Un elemento DOME con un niño DOMText. Del mismo modo, esto

<div class="header">

es realmente tres nodos: el elemento DOME con un DOMAttr que contiene un DOMText. Como todos estos heredan sus propiedades y métodos de DOMNode, es esencial familiarizarse con la clase DOMNode.

En la práctica, esto significa que el DIV que ha obtenido está vinculado a todos los demás nodos del documento. Puede ir hasta el elemento raíz o hasta las hojas en cualquier momento. Está todo allí. Solo tiene que consultar o recorrer el documento para obtener la información deseada.

Ya sea que haga eso al iterar los childNodes del DIV o use getElementByTagName() o XPath depende de usted. Solo tiene que entender que no está trabajando con HTML sin procesar, sino con nodos que representan ese documento HTML completo.

Si necesita ayuda para extraer información específica del documento, debe aclarar qué información quiere obtener de ella. Por ejemplo, podría preguntar cómo buscar todos los enlaces de la tabla y luego podríamos responder algo como:

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

Pero a menos que sea más específico, solo podemos adivinar qué nodos podrían ser relevantes.

Si necesita más ejemplos y fragmentos de código sobre cómo trabajar con DOM, navegue a través de mis respuestas anteriores a preguntas relacionadas:

  • https://.com/search?q=user%3A208809+DOM

Por ahora, debe haber un fragmento para cada UseCase básico o mediano que pueda tener con DOM.