Foros del Web » Programando para Internet » PHP »

Simplexml y xpath

Estas en el tema de Simplexml y xpath en el foro de PHP en Foros del Web. Cada vez que utilizo la función "simplexml" de php para leer el "xml" especifico el path de lectura de esta manera: Código PHP: $xml -> ...
  #1 (permalink)  
Antiguo 06/09/2010, 09:52
 
Fecha de Ingreso: abril-2009
Ubicación: Zaragoza
Mensajes: 50
Antigüedad: 14 años, 11 meses
Puntos: 1
Simplexml y xpath

Cada vez que utilizo la función "simplexml" de php para leer el "xml" especifico el path de lectura de esta manera:
Código PHP:
$xml->xpath("//madre//hijo"); 
El resultado es magnífico si el path existe, pero si este no existe obtengo un error critico que hace que la web se quede infuncional.

¿Existe alguna manera de saber previamente si el path que se pasa existe en el xml y asi ahorrarme el error?, ¿se os ocurre alguna manera de hacer que el tratamiento de ese error sea menos drástico por asi llamarlo, que en vez de aparecer el error critico aparezca simplemente el resultado en blanco o devuelva false....?


Gracias, sois los mejores.
  #2 (permalink)  
Antiguo 06/09/2010, 10:17
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Simplexml y xpath

El usar $xml->xpath("//madre//hijo"); si no existe no te devuelve un error. Por ejemplo
Código PHP:
Ver original
  1. <?php
  2. $string = <<<XML
  3. <foo>
  4.     <bar>
  5.         <baz>candy</baz>
  6.     </bar>
  7.     <bar>
  8.         <vegetable>fruits</vegetable>
  9.     </bar>
  10. </foo>
  11. XML;
  12.  
  13. $xml = new SimpleXMLElement($string);
  14.  
  15. $results = $xml->xpath('//fruits');
  16.  
  17. foreach($results as $result){
  18.     echo $result;
  19. }
Se supone que busca aquellos elementos que se llamen fruits y como no existen no despliega información. Debe ser que tienes declarado algo que usa el valor que te devuelve $xml y lo estás usando como que forzosamente debe siempre haber algún valor. Debes crear algúna condición para verificar si existe o no algún valor. Por ejemplo
Código PHP:
Ver original
  1. <?php
  2. $string = <<<XML
  3. <foo>
  4.     <bar>
  5.         <baz>candy</baz>
  6.     </bar>
  7.     <bar>
  8.         <vegetable>fruits</vegetable>
  9.     </bar>
  10. </foo>
  11. XML;
  12.  
  13. $xml = new SimpleXMLElement($string);
  14.  
  15. // Verifica los elementos que sean fruits
  16. $results = $xml->xpath('//fruits');
  17.  
  18. if(count($results) > 0){
  19.     foreach($results as $result){
  20.         echo $result;
  21.     }
  22. }
  23.  
  24.  
  25. // Verifica los elementos que sean baz
  26. $results = $xml->xpath('//baz');
  27.  
  28. if(count($results) > 0){
  29.     foreach($results as $result){
  30.         echo $result;
  31.     }
  32. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Etiquetas: simplexml
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 02:50.