Foros del Web » Programando para Internet » PHP »

Duda sobre el DOM

Estas en el tema de Duda sobre el DOM en el foro de PHP en Foros del Web. Hola estoy usando DOM para extraer textos de urls remotas, pero tengo una duda. Mediante Código PHP: $remote  =  file_get_contents ( "url" ); if(@ $doc ...
  #1 (permalink)  
Antiguo 10/05/2011, 13:44
 
Fecha de Ingreso: febrero-2011
Mensajes: 15
Antigüedad: 13 años, 2 meses
Puntos: 3
Duda sobre el DOM

Hola estoy usando DOM para extraer textos de urls remotas, pero tengo una duda.

Mediante
Código PHP:
$remote file_get_contents("url");
if(@
$doc->loadHTML("$remote")){
//[...]

Termino llegando a una variable que apunta a un nodo que tiene:

Código HTML:
<p class="text">
     <b>Texto <br><br>mastexto</b>
</p> 
Al acceder a su $p->nodeValue; obtengo "Texto mastexto" pero yo quiero obtener:
"<b>Texto <br><br>mastexto</b>" con las etiquetas y todo.
¿Cómo lo hago?
  #2 (permalink)  
Antiguo 10/05/2011, 13:51
Avatar de @ndreX!  
Fecha de Ingreso: abril-2007
Mensajes: 161
Antigüedad: 17 años
Puntos: 4
Respuesta: Duda sobre el DOM

Es bastante difícil ayudarte como se debe, puesto la estructura que podrías tener. Pero en todo caso, puedes guiarte imprimiendo los valores que obtienes usando print_r, por ejemplo:
Código PHP:
echo '<pre>';
print_r($p);
echo 
'</pre>'
__________________
Blog de Andres Ortiz: http://www.axpuntes.com/
  #3 (permalink)  
Antiguo 10/05/2011, 14:20
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Duda sobre el DOM

Usa la función htmlspecialchars(), es decir:

Código PHP:
Ver original
  1. echo htmlspecialchars($p->nodeValue);

saludos.
  #4 (permalink)  
Antiguo 10/05/2011, 14:57
 
Fecha de Ingreso: febrero-2011
Mensajes: 15
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Duda sobre el DOM

Cita:
Iniciado por @ndreX! Ver Mensaje
Es bastante difícil ayudarte como se debe, puesto la estructura que podrías tener. Pero en todo caso, puedes guiarte imprimiendo los valores que obtienes usando print_r, por ejemplo:
Código PHP:
echo '<pre>';
print_r($p);
echo 
'</pre>'

No acabo de entender lo que dices, pero de todas formas, si hago
Código PHP:
print_r($p); 
Obtengo:

DOMElement Object
(
)


Cita:
Iniciado por angelfcm Ver Mensaje
Usa la función htmlspecialchars(), es decir:

Código PHP:
Ver original
  1. echo htmlspecialchars($p->nodeValue);

saludos.
Las comillas las he puesto para remarcar lo que quiero. Me he explicado mal. La variable $p apunta a un DOMElement que apunta <p> y esta a su vez contiene:

Código HTML:
 <b>Texto <br><br>mastexto</b> 
Si sigo bajando de niveles en el árbol hay otro nodo que apunta a la etiqueta <b> esta contentra

Código HTML:
Texto <br><br>mastexto
lo que quiero es pillar los tags <br> como texto plano. Con htmlspecialchars() me sustituye las comillas por '&quot pero no me pilla los <br>
  #5 (permalink)  
Antiguo 12/05/2011, 19:05
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Duda sobre el DOM

Hola!,
Ya te entendí.
Mira encontré esta forma de conseguir el html directamente de cualquier nodo, sólo modifica lo que escribo en comentario:
Código PHP:
Ver original
  1. <?php
  2. function string_getInsertedString($long_string,$short_string,$is_html=false){
  3.   if($short_string>=strlen($long_string))return false;
  4.   $insertion_length=strlen($long_string)-strlen($short_string);
  5.   for($i=0;$i<strlen($short_string);++$i){
  6.     if($long_string[$i]!=$short_string[$i])break;
  7.   }
  8.   $inserted_string=substr($long_string,$i,$insertion_length);
  9.   if($is_html && $inserted_string[$insertion_length-1]=='<'){
  10.     $inserted_string='<'.substr($inserted_string,0,$insertion_length-1);
  11.   }
  12.   return $inserted_string;
  13. }
  14. function DOMElement_getOuterHTML($document,$element){
  15.   $html=$document->saveHTML();
  16.   $element->parentNode->removeChild($element);
  17.   $html2=$document->saveHTML();
  18.   return string_getInsertedString($html,$html2,true);
  19. }
  20.  $doc=new DOMDocument();
  21.  $doc->load("Tu_archivo"); // Cambia la forma como lo cargas(loadXML,loadHTML, etc.)
  22.  $html=$doc->getElementsByTagName("html")->item(0);//Aquí llama al elemento que quieras ya sea por tagname, id, classname.
  23.  $string=DOMElement_getOuterHTML($doc,$html);
  24.  $doc2=new DOMDocument();
  25.  $doc2->loadXML($string);
  26.  $html=$doc2->saveHTML();
  27.  echo $html; //EL RESULTADO ESTÁ AQUÍ!!!
  28. ?>
Saludos!.

Atención: para poder seguir ayudandote, agradéce mis mensajes(karma) o envíame un MP para encontrar tus mensajes rápido.
  #6 (permalink)  
Antiguo 12/05/2011, 20:24
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Duda sobre el DOM

Cita:
Iniciado por angelfcm Ver Mensaje
Atención: para poder seguir ayudandote, agradéce mis mensajes(karma) o envíame un MP para encontrar tus mensajes rápido.
La valoración del usuario es un acto voluntario que no debería estar condicionado a la ayuda prestada. Qué mala actitud.
  #7 (permalink)  
Antiguo 12/05/2011, 21:07
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Duda sobre el DOM

Cita:
Iniciado por metacortex Ver Mensaje
La valoración del usuario es un acto voluntario que no debería estar condicionado a la ayuda prestada. Qué mala actitud.
Hola!,

Te pido que LEAS Y COMPRENDAS primero antes de de calificar!! -.-

Mira no es para que te vallas a ofender pero:

Si por ejemplo, escríbo:

Cita:
Un grupo de personas dicen: ->Jéfe!, ¿Lo matamos o lo dejámos ir?
Y el jéfe contesta: ->No, matenlo (Que lo maten)
O también puede decir: ->No matenlo (Que NO LO MATEN)
Y en mi caso díje
o envíame un MP para encontrar tus mensajes rápido.
Núnca dije
y envíame un MP para encontrar tus mensajes rápido.

El punto es que es necesito un enlace más rápido ya que la única forma de entrar directamente es en la parte de notificaciones, por que luego ni me contestan y alli ando revisando a cada rato lo que me toma mucho tiempo.

Además ni que fuera dinero de verdad o sirviera para algo, sean comprensibles porfavor.

Saludos
  #8 (permalink)  
Antiguo 12/05/2011, 21:18
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Duda sobre el DOM

buenas,
siempre puedes revisar los temas en que estas suscritos, ya sea porque has participado en él o porque te has suscrito. tambien puedes organizarlo por carpetas. lo otro que no entiendo es porque tu mismo no te envias el MP con el enlace. o simplemente creas un bookmark en tu navegador.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #9 (permalink)  
Antiguo 12/05/2011, 22:24
(Desactivado)
 
Fecha de Ingreso: abril-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 236
Respuesta: Duda sobre el DOM

Hola zerokilled!,
Muchas Gracias por la info, no lo sabía, tú si eres participativo.

Aunque ya me enfadé de que ya van varios que me critícan: esta vez fué por lo que escribí en el mensaje de arriba que fué sensurado para el Sr. colaborador,
otros porque les doy muchos ejemplos a algunas personas
y otros porque mi mensaje fué contradictorio(incidentalmente).

Es feo ver puras notificaciones negativas, siendo que le he estado echando ganas al foro désde hace unos dias. Es mi primera vez en foros y pues que den oportunidad, ¿no?

Saludos!
  #10 (permalink)  
Antiguo 12/05/2011, 23:03
Avatar de metacortex
Viejo demente
 
Fecha de Ingreso: junio-2004
Ubicación: Caracas - Venezuela
Mensajes: 9.027
Antigüedad: 19 años, 10 meses
Puntos: 832
Respuesta: Duda sobre el DOM

Cita:
Iniciado por angelfcm Ver Mensaje
Cita:
Iniciado por metacortex Ver Mensaje
La valoración del usuario es un acto voluntario que no debería estar condicionado a la ayuda prestada. Qué mala actitud.
Hola!,

Te pido que LEAS Y COMPRENDAS primero antes de de calificar!! -.-
No te he calificado.

Cita:
Iniciado por angelfcm Ver Mensaje
Aunque ya me enfadé de que ya van varios que me critícan: esta vez fué por lo que escribí en el mensaje de arriba que fué sensurado para el Sr. colaborador,
otros porque les doy muchos ejemplos a algunas personas
y otros porque mi mensaje fué contradictorio(incidentalmente).

Es feo ver puras notificaciones negativas...
Entonces el problema no es de "leer y comprender" sino de expresarte correctamente cuando escribes. Nota que tú mismo estás reconociendo que tu mensaje fue malinterpretado por varios, quienes calificaron negativamente tu post al leer esto:

Cita:
Iniciado por angelfcm Ver Mensaje
Atención: para poder seguir ayudandote, agradéce mis mensajes(karma) o envíame un MP para encontrar tus mensajes rápido.
Te tomó un par de posts extra para explicar tus motivos, mediante los cuales al fin nos enteramos que aún no has aprendido a usar las herramientas del foro y tu petición iba orientada a resaltar los mensajes en los que participas.

Pero a primera, segunda y tercera vista tu nota parecía un condicionamiento de ayuda por karma. Hombre, nadie es adivino para saber lo que hay en tu cabeza. Si te expresas mal te entienden mal.

Etiquetas: dom
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:59.