Foros del Web » Programando para Internet » PHP »

con el dom de php se puede extraer esto

Estas en el tema de con el dom de php se puede extraer esto en el foro de PHP en Foros del Web. Teniendo una estructura html asi: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < div class = "caja" >     < h3 > DATOS < / ...
  #1 (permalink)  
Antiguo 03/03/2015, 14:22
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
con el dom de php se puede extraer esto

Teniendo una estructura html asi:

Código HTML:
Ver original
  1. <div class="caja">
  2.     <h3>DATOS</h3>
  3.     <p>nombre</p>
  4.     <p><span>victoria</span> dato<span> correcto</span></p>
  5. </div>
  6.  
  7. <div class="caja">
  8.     <h3>DATOS</h3>
  9.     <p>edad</p>
  10.     <p><span>26</span> dato<span> correcto</span></p>
  11. </div>

puedo extraer con el dom de php dentro de cada caja el nombre del primer div y la edad del segundo div, es posible o tengo que recurrir alguna clase de php?
  #2 (permalink)  
Antiguo 03/03/2015, 14:30
Avatar de cluster28  
Fecha de Ingreso: enero-2008
Ubicación: Donostia - San Sebastián
Mensajes: 756
Antigüedad: 16 años, 4 meses
Puntos: 32
Respuesta: con el dom de php se puede extraer esto

http://php.net/manual/es/class.domdocument.php
  #3 (permalink)  
Antiguo 03/03/2015, 14:40
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: con el dom de php se puede extraer esto

haber ya estado mirando pero solo veo document.getElement y con eso no me sirve, alguien me podria echar una mano?
  #4 (permalink)  
Antiguo 03/03/2015, 14:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: con el dom de php se puede extraer esto

Lamentablemente no existe una implementación de getElementsByClass(), pero usando getElementsByTagName() podrías implementar dicha solución por tu cuenta.

Vamos, que lo que intentas hacer no es fácil si no tienes experiencia trabajando con DOM y objetos en PHP.

So, ¿qué tipo de ayuda necesitas entonces?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 03/03/2015, 15:03
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: con el dom de php se puede extraer esto

pateketrueke me podrias orientar un poco mas para intentar hacerlo, el problema que veo que ne realidad en el documente hay muchas mas etiquetas de las del ejemplo y me imagino que tendria que recorrer todas algo asi verdad?
  #6 (permalink)  
Antiguo 03/03/2015, 15:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: con el dom de php se puede extraer esto

Sí, efectivamente, si tienes ya has trabajado con el DOM anteriormente debería ser cosa fácil.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 03/03/2015, 15:22
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: con el dom de php se puede extraer esto

voy a intentarlo haber si lo consigo, gracias si tengo dudas volvere y lo siento saludos.
  #8 (permalink)  
Antiguo 03/03/2015, 15:34
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: con el dom de php se puede extraer esto

Mas o menos lo estoy consiguiendo pero al cargar el html externo me da este aviso

Warning: DOMDocument::loadHTMLFile(): Unexpected end tag

creo que es un comentario javascript, como puedo evitar ese aviso que funciona pero molesta un poco, saludos.
  #9 (permalink)  
Antiguo 03/03/2015, 15:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: con el dom de php se puede extraer esto

Por favor, consulta el manual: http://php.net/manual/es/domdocument.loadhtmlfile.php

Cita:
Aunque el HTML malformado debería cargar con éxito, esta función puede generar errores E_WARNING al encontrarse con marcado erróneo. Se pueden usar las funciones de manejo de errores de libxml para manejar estos errores.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 03/03/2015, 16:03
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: con el dom de php se puede extraer esto

Perdon no me di cuenta, estado revisando y veo que el nodo hermano no se puedo saber, esque si uso con el nodo hijo tengo que capturar muchas mas etiquetas, creo que no se puedo el nodo hermano pero si se me paso haber si podeis decirmelo.
  #11 (permalink)  
Antiguo 03/03/2015, 20:22
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: con el dom de php se puede extraer esto

Tenes que crear un objeto SimpleXMLElement, te permite acceder e iterarlo como array, es muy practico.


Código PHP:
$HTMLDocument = new DOMDocument(); //Creo objeto Dom
$HTMLDocument->loadHTMLFile('index.html');//Cargo el archivo html
$HTML simplexml_import_dom($HTMLDocument);//creo objeto SimpleXMLElement

//podes acceder a los elementos como un objeto
$div1 $HTML->body->div[0]; //primer elemento div

//tambien podes acceder a cada elemento usando string entre llaves
$div2 $HTML->{'body'}->div[1]; //segundo elemento div

//asi se acceden a los atributos de cada etiqueta
echo $div1['class'] . '<br />';

//y aca mostramos el nombre del primer div, y la edad del segundo
echo $div1->p[1]->span '<br />'//en primer div, segunda etiqueta hija p, hijo span 
echo $div2->p[1]->span '<br />';//lo mismo que arriba con el segundo div

//si queres mostrar una estructura XML como string haces
echo $div1->asXML(); //toda la estructura del primer div

/*TODO ESTO MUESTRA

caja<br />
victoria<br />
26<br />
<div class="caja">
        <h3>DATOS</h3>
        <p>nombre</p>
        <p><span>victoria</span> dato<span> correcto</span></p>
</div>

*/ 
lee mas aca y divertite jugando:
http://php.net/manual/es/book.simplexml.php
http://php.net/manual/es/simplexml.examples.php

Espero que te haya servido

Última edición por darioPHP; 03/03/2015 a las 20:25 Razón: mal una variable
  #12 (permalink)  
Antiguo 04/03/2015, 09:44
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: con el dom de php se puede extraer esto

Hola gracias por vuestra ayuda, ya que estoy en proceso de aprendizaje quiero hacerlo de las dos formas que es posible, con getElementById encuentro un div pero no se aceder a sus hijos algo asi:

Código HTML:
Ver original
  1. <div id='padre'>
  2. <div>primero</div>
  3. <div>segundo<p>lo que sea</p></div>
  4. <div>
  5.    <h4>lo que sea</h4>
  6.      <p>tercero<span></span></p>
  7.      <div>llegar aqui</div>
  8. <div>otro</div>
  9. <div>otro</div>
  10. </div>
  11. <div>cuarto</div>
  12. </div>

quiero llegar al tercer div del padre y dentro de ese div al su hijo div donde pone lllegar aqui,osea que como se recorre los nodos hijos?
alguna ayuda?
saludos
  #13 (permalink)  
Antiguo 04/03/2015, 10:50
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: con el dom de php se puede extraer esto

Código PHP:
$HTMLDocument = new DOMDocument(); //Creo objeto Dom
$HTMLDocument->loadHTMLFile('element.html');//Cargo el archivo html
$busquedaPorId $HTMLDocument->getElementById('padre'); //busco por id el div#padre

$HTML simplexml_import_dom($busquedaPorId);//creo objeto SimpleXMLElement

$TercerDiv $HTML->div[2]; //Tercera posicion de los hijos div [0,1,2](3)
$DivHijo $TercerDiv->div//El hijo div del tercer div

echo $DivHijo//muestro el contenido

/*MUESTRA

llegar aqui

*/ 
La verdad es que no soy un experto manejando Dom con PHP, probablemente haya mejores formas.
A mi se me ocurrio esta manera creando nuevamente el SimpleXML
Recorda que podes iterar cada elemento con un Foreach, por lo cual puedes generar busquedas etc, y acceder a los atributos mediante los corchetes ej: $HTML->div['id'].

Tomate un tiempo para leer el manual, y probar cosas.

Etiquetas: dom, html
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:27.