Foros del Web » Programando para Internet » PHP »

Recorrer XML en PHP

Estas en el tema de Recorrer XML en PHP en el foro de PHP en Foros del Web. Hola, Tengo un xml del tipo asi (esta en una variable como respuesta de un web service) Código: <Tag1> <Tag2> <dim1>Name dim1</dim1> <dim2>Name Dim2</dim2> </Tag2> ...
  #1 (permalink)  
Antiguo 24/08/2012, 04:17
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Recorrer XML en PHP

Hola,

Tengo un xml del tipo asi (esta en una variable como respuesta de un web service)
Código:
<Tag1>
     <Tag2>
          <dim1>Name dim1</dim1>
          <dim2>Name Dim2</dim2>
     </Tag2>
     <Tag3 dim1='aaaaa' dim2=12345/>
     <Tag3 dim1='bbbbb' dim2=78901/>
</Tag1>
Me podeis ayudar a recorrer esto para así extraer los datos??

Gracias y un saludo
__________________
La ficción es y será mi única realidad
  #2 (permalink)  
Antiguo 24/08/2012, 04:38
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Recorrer XML en PHP

Con la extension SimpleXML es muy sencillo. Está disponible desde PHP 5 me parece.

Échale un vistazo:
http://php.net/manual/es/book.simplexml.php
  #3 (permalink)  
Antiguo 24/08/2012, 04:53
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer XML en PHP

Lo he probado


$xml = simplexml_load_string($result);

Pero me dice

Cita:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Document labelled UTF-16 but has UTF-8 content in
__________________
La ficción es y será mi única realidad
  #4 (permalink)  
Antiguo 24/08/2012, 05:16
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Recorrer XML en PHP

Pero en $result fijo que tienes el XML no? imprime el contenido de $result y compruebalo por si acaso.

Y también revisa las cabecera del XML el formato y version que le das

Última edición por alyciashape; 24/08/2012 a las 05:24
  #5 (permalink)  
Antiguo 24/08/2012, 05:36
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer XML en PHP

Si si tengo un xml. La estructura es tal cual te comento

Justo encima de <tag1> hay

<?xml version="1.0" encoding="utf-16"?>
__________________
La ficción es y será mi única realidad
  #6 (permalink)  
Antiguo 24/08/2012, 05:45
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Recorrer XML en PHP

¿Y por qué usasa utf-16? Como bien te dice el error, se esperaba utf-8 y se encontró con utf-16.

Prueba poniendo utf-8. Debería funcionar.

OJO desconozco totalmente la existencia de utf-16 no se si es a propósito porque necesitas esa codificación.
  #7 (permalink)  
Antiguo 27/08/2012, 00:09
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer XML en PHP

Hola,

Se que el problema es por el utf-16,el problema es que es el xml que me devuelve, no lo creo yo por lo que no lo puedo cambiar...
__________________
La ficción es y será mi única realidad
  #8 (permalink)  
Antiguo 27/08/2012, 01:00
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Recorrer XML en PHP

Prueba a reemplazar UTF-16 por UTF-8 antes de pasarselo a Simple XML

Código PHP:
$xml file_get_contents('http://www.ejemplo.com/');
$xml preg_replace('/(<\?xml[^?]+?)utf-16/i''$1utf-8'$xml); 
Revisa que no te aparezcan caracteres extraños claro
  #9 (permalink)  
Antiguo 27/08/2012, 02:21
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer XML en PHP

Gracias alyciashape justo ahora iba a postear eso, lo he hecho y no da errores. Pero me ha surgido otro problema

La estructura como dije es

Código:
<Tag1>
     <Tag2>
          <dim1>Name dim1</dim1>
          <dim2>Name Dim2</dim2>
     </Tag2>
     <Tag3 dim1='aaaaa' dim2=12345/>
     <Tag3 dim1='bbbbb' dim2=78901/>
</Tag1>
Entonces para recorrerlo hago el siguiente codigo

Código:
$DocumentElement = $dom->getElementsByTagName('Tag1')->item(0);
	//var_dump($DocumentElement);
	$Tag2 = $DocumentElement->getElementsByTagName('Tag2');
	
	
	foreach($Tag2 as $r)
	{
		foreach($r->childNodes as $c)
		{
			print_r($c->nodeValue);
		}
	}
Con esto obtengo
Cita:
Name dim1
Name dim2
Asi que genial

Pero si hago

Código:
$DocumentElement = $dom->getElementsByTagName('Tag1')->item(0);
	//var_dump($DocumentElement);
	$Tag2 = $DocumentElement->getElementsByTagName('Tag3');
	
	
	foreach($Tag3 as $r)
	{
		foreach($r->childNodes as $c)
		{
			print_r($c->nodeValue);
		}
	}
Lo que obtengo es vacio. No obtengo lo que querria que seria en este caso

Cita:
aaaaa
12345
Alguna idea de como conseguir eso???

Gracias

Saludos
__________________
La ficción es y será mi única realidad
  #10 (permalink)  
Antiguo 27/08/2012, 02:34
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Recorrer XML en PHP

Bueno de XML no controlo mucho pero es que me parece que los datos deberían ser
<Tag3>aaaaa</tag3>
en lugar de:
<Tag3 dim1='aaaaa' dim2=12345/>

De hecho no acabo de entender por qué esa línea es así. Pero bueno como ya has dicho no tienes acceso al XML. YO en caso de no encontrar solución sacaría los datos por las malas con un substr...
  #11 (permalink)  
Antiguo 27/08/2012, 02:37
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer XML en PHP

Hola,

Estoy totalmente de acuerdo contigo que deberia ser <tag3>aaa</tag3> pero no lo es y no depende de mi....
El tema es que esto deberia ser automatico, y deberia reconocer los campos solo... sino m keda mas remedio pues substring pero tendria que encontrar otra solucion
__________________
La ficción es y será mi única realidad
  #12 (permalink)  
Antiguo 27/08/2012, 02:39
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Recorrer XML en PHP

Prueba así por curiosidad

foreach ($Tag3->Tag[0]->dim1 as $dim) {
echo "$Tag3 tiene $dim";
}
  #13 (permalink)  
Antiguo 27/08/2012, 05:18
 
Fecha de Ingreso: junio-2005
Ubicación: Barcelona
Mensajes: 458
Antigüedad: 18 años, 10 meses
Puntos: 4
Respuesta: Recorrer XML en PHP

Al final lo solucione. Lo posteo por si le interesa a alguien

Código PHP:

    $xml 
simplexml_load_string($res);
    foreach(
$xml->Tag3 as $r){
        foreach (
$r->attributes() as $a => $b) {
            echo 
$a,'="',$b,"\"\n";
        }
    } 
Siendo res el resultado del xml
__________________
La ficción es y será mi única realidad

Etiquetas: xml, variables
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 13:00.