Foros del Web » Programando para Internet » PHP »

Problemas al leer XML

Estas en el tema de Problemas al leer XML en el foro de PHP en Foros del Web. Veréis tengo unos 900.000 XML creados con ésta estructura: <?xml version="1.0" encoding="UTF-8"> <imgs> <image path="image9383840389383.jpg" bild="img/s.jpg" artist="Eros Ramazzotti" title="La cosa mas bella"/> </imgs> Como veis, ...
  #1 (permalink)  
Antiguo 02/10/2009, 03:20
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Pregunta Problemas al leer XML

Veréis tengo unos 900.000 XML creados con ésta estructura:

<?xml version="1.0" encoding="UTF-8">
<imgs>
<image path="image9383840389383.jpg" bild="img/s.jpg" artist="Eros Ramazzotti" title="La cosa mas bella"/>
</imgs>

Como veis, después de UTF-8 les falta a todos el ?>

Entonces con este código

<?php
$archivo = 'prueba.xml';
if (file_exists($archivo)) {
$imgs= simplexml_load_file($archivo);
if($imgs){
foreach ($imgs $index => $info) {
echo $info["path"];
}
} else echo "Sintaxi XML inválida";
} else echo "Error abriendo rss.xml";
?>

Me da Sintaxi XML inválida, pero le pongo el ?> me lo lee bien.

Puedo hacer algo para que me coja el path aunque no tenga el ?> sin que me salte el error??

Muchas gracias
__________________
aste nagusia

Última edición por Mikelon85; 02/10/2009 a las 03:28
  #2 (permalink)  
Antiguo 02/10/2009, 03:47
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problemas al leer XML

Puedes crearte algún pequeño script que solucione el problema.

Código PHP:
<?php
$archivo 
"archivo.xml";
$datos file_get_contents($archivo);
$datos str_replace('<?xml version="1.0" encoding="UTF-8">''<?xml version="1.0" encoding="UTF-8"?>'$cadena);
$pt fopen("nuevo_".$archivo'w');
fwrite($pt$datos);
fclose($pt);
//Y así con los 900.000;
?>
__________________
Revolucionario controlador de plantillas para php
www.simphple.com

Última edición por Tokkara; 02/10/2009 a las 03:58
  #3 (permalink)  
Antiguo 02/10/2009, 04:24
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

Código PHP:
<?php
$archivo 
"archivo.xml";
$datos file_get_contents($archivo);
$datos str_replace('<?xml version="1.0" encoding="UTF-8">''<?xml version="1.0" encoding="UTF-8"?>'$datos);
$pt fopen($archivo'w');
fwrite($pt$datos);
fclose($pt);
if (
file_exists($archivo)) {
$imgssimplexml_load_file($archivo);
if(
$imgs){
foreach (
$imgs $index => $info) {
echo 
$info["path"];
}
} else echo 
"Sintaxi XML inválida";
} else echo 
"Error abriendo rss.xml";
?>
Buenas, gracias por tu respuesta, no me funciona con esto

__________________
aste nagusia
  #4 (permalink)  
Antiguo 02/10/2009, 04:40
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 1 mes
Puntos: 16
Respuesta: Problemas al leer XML

Código php:
Ver original
  1. <?php
  2. $archivo = 'prueba.xml';
  3. if (file_exists($archivo)) {
  4.      $imgs= simplexml_load_file($archivo);
  5.      if($imgs){
  6.            foreach($imgs->imgs as $img){
  7.            echo $img["path"];
  8.       }
  9. } else {
  10.      echo "error al Abrir el archivo";
  11. }
  12.  
  13. ?>

probalo asi
  #5 (permalink)  
Antiguo 02/10/2009, 04:47
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

Cita:
Iniciado por samu22 Ver Mensaje
Código php:
Ver original
  1. <?php
  2. $archivo = 'prueba.xml';
  3. if (file_exists($archivo)) {
  4.      $imgs= simplexml_load_file($archivo);
  5.      if($imgs){
  6.            foreach($imgs->imgs as $img){
  7.            echo $img["path"];
  8.       }
  9. } else {
  10.      echo "error al Abrir el archivo";
  11. }
  12.  
  13. ?>

probalo asi
tampoco hace nada, me estoy dando cuenta que el replace del post anterior, al poner ?> cierra el PHP
__________________
aste nagusia
  #6 (permalink)  
Antiguo 02/10/2009, 04:51
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 1 mes
Puntos: 16
Respuesta: Problemas al leer XML

Cita:
tampoco hace nada, me estoy dando cuenta que el replace del post anterior, al poner ?> cierra el PHP
ponelo en comillas dobles

Código php:
Ver original
  1. $datos = str_replace("<?xml version=\"1.0\" encoding=\"UTF-8\">", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>", $datos);
  2.  
  3. // o
  4. $datos = str_replace("<?xml version='1.0' encoding='UTF-8'>", "<?xml version='1.0' encoding='UTF-8'?>", $datos);
  #7 (permalink)  
Antiguo 02/10/2009, 05:15
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

Lo que estoy viendo es que ahora me dice XML inválida cuando por ejemplo tengo estos datos:

<?xml version="1.0" encoding="UTF-8"?>
<imgs>
<img path="delincue2332.jpg" bild="img/s.jpg" artist="Los Delinq&uuml;entes" title="El aire de la calle"/>
</imgs>

Me da error, si quito esos caracteres en el XML directamente, no da el error.

No hay ningun modo de que lea el XML aunque tenga esos caracteres raros?

Gracias por la ayuda my frinds :)
__________________
aste nagusia
  #8 (permalink)  
Antiguo 02/10/2009, 08:29
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problemas al leer XML

Una de las características XML es que no puede llevar etiquetas únicas; es decir, toda etiqueta que se abra, obligatoriamente debe cerrarse. Por tanto la etiqueta <img> te da error porque es única y XML la interpreta como si fuera una cadena de texto entre las 2 etiqueta <imgs>. Como esa cadena de texto tiene caractéres especiales no puede procesar el archivo XML. Tienes que liberar los caracteres usando CDATA

Prueba así
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <imgs>
  3. <![CDATA[<img path="delincue2332.jpg" bild="img/s.jpg" artist="Los Delinq&uuml;entes" title="El aire de la calle"/>]]>
  4. </imgs>

o así
Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <imgs>
  3. <path>delincue2332.jpg</path>
  4. <bild>img/s.jpg</bild>
  5. <artist><![CDATA[Eros Ramazzotti]]></artist>
  6. <title><![CDATA[La cosa mas bella]]></title>
  7. </imgs>
Esta última forma es más parecida a la filosofía de los archivos XML que la primera.
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #9 (permalink)  
Antiguo 02/10/2009, 08:37
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

a ver como arreglo 900.000 ficheros :( jeje

Código PHP:
$datos str_replace("<img","<![CDATA[<img",$datos);
$datos str_replace("/>","/>]]>",$datos); 
a ver si me deja hacer esto
__________________
aste nagusia
  #10 (permalink)  
Antiguo 02/10/2009, 08:43
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

El str replace me ha dejado el XML así:

<?xml version="1.0" encoding="UTF-8"?>
<imgs>
<![CDATA[<img path="delinc923833.jpg"bild="img/s.jpg" artist="Los Delinq&uuml;entes" title="El aire de la calle"/>]]>
</imgs>

y me sigue diciendo sintaxis inválida.
__________________
aste nagusia
  #11 (permalink)  
Antiguo 02/10/2009, 09:11
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problemas al leer XML

¿Cual es el error exacto que te da? ¿no especifica ninguna linea?¿Ese es el archivo XML completo o hay más? Y quizas sea una tontería preguntar esto pero ¿has comprobado la cabeceras? Aseguarte que son del tipo text/xml.

Es que me parece que el documento está bien formado.
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #12 (permalink)  
Antiguo 02/10/2009, 09:17
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

Cita:
Iniciado por Tokkara Ver Mensaje
¿Cual es el error exacto que te da? ¿no especifica ninguna linea?¿Ese es el archivo XML completo o hay más? Y quizas sea una tontería preguntar esto pero ¿has comprobado la cabeceras? Aseguarte que son del tipo text/xml.

Es que me parece que el documento está bien formado.
tengo que meterle cabeceras HTML al PHP??

Ya te digo que sin los caracteres raros no da ningún problema
__________________
aste nagusia
  #13 (permalink)  
Antiguo 02/10/2009, 09:27
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Problemas al leer XML

Sugiero entres al foro de XML y preguntes si vale la pena usar CDATA en atributos:

Cita:
artist="Los Delinq&uuml;entes"
De no ser asi, seguro que hay otros metodos.
  #14 (permalink)  
Antiguo 02/10/2009, 09:34
Avatar de Tokkara  
Fecha de Ingreso: junio-2008
Mensajes: 131
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Problemas al leer XML

Lo de las cabeceras no estoy muy seguro. También he probado tu código xml en un sistema de validación de código XML online y no me ha dado ningún fallo. Es muy extraño.

Tambíen he probado ha usar el simplexml_load_file en mi servidor local, y no me ha dado fallo, aunque tampoco me ha mostrado la cadena de caracteres, es muy raro. Te recomiendo que hacer lo que ha dicho mayid

Un saludo
__________________
Revolucionario controlador de plantillas para php
www.simphple.com
  #15 (permalink)  
Antiguo 02/10/2009, 09:43
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Respuesta: Problemas al leer XML

estoy por abrir los XML como texto y recoger los path a pelo, porque estoy desesperado.
__________________
aste nagusia
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 12:46.