tag preservewhitespace parse node name leer php html parsing domdocument

preservewhitespace - php load html



Parse HTML con DOMDocument HTML de PHP (2)

Intenté hacerlo con "getElementsByTagName", pero no funcionaba, soy nuevo en el uso de DOMDocument para analizar HTML, ya que solía usar expresiones regulares hasta ayer, algunos asnos amables me dijeron que DOMEDocument sería mejor para el trabajo, así que lo estoy probando :)

Busqué en Google por un rato buscando explicaciones, pero no encontré nada que me ayudara (no con la clase de todos modos)

Así que quiero capturar "Capture this text 1" y "Capture this text 2", y así sucesivamente.

No parece difícil, pero no puedo resolverlo :(

<div class="main"> <div class="text"> Capture this text 1 </div> </div> <div class="main"> <div class="text"> Capture this text 2 </div> </div>


Puedes usar http://simplehtmldom.sourceforge.net/

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

Algo como esto:

// Find all <div> which have attribute id=text $ret = $html->find(''div[id=text]'');

Consulte la documentación de este para obtener más ayuda.


Si quieres obtener:

  • El texto
  • eso está dentro de una etiqueta <div> con class="text"
  • eso es, en sí mismo, dentro de un <div> con class="main"

Yo diría que la manera más fácil es no usar DOMDocument::getElementsByTagName , que devolverá todas las etiquetas que tengan un nombre específico (mientras que usted solo quiere algunas de ellas) .

En cambio, usaría una consulta XPath en su documento, usando la clase DOMXpath .


Por ejemplo, algo como esto debería hacer, cargar la cadena HTML en un objeto DOM e instanciar la clase 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);


Y, entonces, puede usar consultas XPath, con el método DOMXPath::query , que devuelve la lista de elementos que estaba buscando:

$tags = $xpath->query(''//div[@class="main"]/div[@class="text"]''); foreach ($tags as $tag) { var_dump(trim($tag->nodeValue)); }


Y al ejecutar esto, me da el siguiente resultado:

string ''Capture this text 1'' (length=19) string ''Capture this text 2'' (length=19)