AJAX - extraer valor de nodos xml

   
Vista:

extraer valor de nodos xml

Publicado por joaquin chopaqui@hotmail.com (2 intervenciones) el 12/12/2014 17:46:43
Hola amigos.

Necesito ayuda mi problema es que no puedo extraer los nodos xml de responseXML.

Primero envío los datos desde el servidor con:

1
2
3
4
5
6
7
8
9
10
11
$zonas = DB::table('zonas')->distinct()->get();
        $xmlstr = "<?xml version='1.0' ?><zonas></zonas>";
        $xml = new SimpleXMLElement($xmlstr);
 
        foreach ($zonas as $value)
        {
            $xml->addChild('nombre', $value->nombre);
            $xml->addChild('id', $value->id);
        }
        header('Content-type: text/xml');
        return $xml->asXML;

y luego en la página con javascript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function añadir_zona(){
	var indice;
	i = i + 1;
	name = "zona" + i;
 
	if (window.XMLHttpRequest) {
		XMLHttpRequestObject = new XMLHttpRequest();
 
	} else if (window.ActiveXObject) {
		XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
	}
	XMLHttpRequestObject.open('POST', 'proveedores/obtenerZonas',true);
	XMLHttpRequestObject.send(null);
	XMLHttpRequestObject.onreadystatechange = function()
	{
		var lista = document.createElement('select');
		lista.name = name;
		var nombre;
 
		if(XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200){
			var xmlDocument = XMLHttpRequestObject.responseXML;
			parser = new DOMParser();
			xmlDocument = parser.parseFromString(xmlDocument,"text/xml");
 
			var opciones = xmlDocument.getElementsByTagName("zonas");
 
			for(indice = 0; indice <= opciones.length; indice++)
			{
					alert(opciones[indice].getElementsByTagName("nombre")[0].item(0).firstChild.data);
			}
		}
	}
}

y me dice Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

extraer valor de nodos xml

Publicado por xve (167 intervenciones) el 13/12/2014 00:32:44
Hola Joaquin, a un documento xmlDocument puedes aplicarle la función getElementsByTagName()?

Yo creo que no se puede...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

extraer valor de nodos xml

Publicado por Vainas (71 intervenciones) el 14/12/2014 21:24:43
Buenas:

No es ese el problema xve, el problema esta en el responseXML. Por alguna extraña razon "parser.parseFromString(xmlDocument,"text/xml");" acepta texto y no un xml ya formado. Tu ya tienes un xml en la respuesta. Cargate estas dos lineas:

1
2
parser = new DOMParser();
			xmlDocument = parser.parseFromString(xmlDocument,"text/xml");

Con eso deberia funcionar. Yo imprimiria el documento a ver si esta llegando bien al navegador de todas fromas:

1
console.log(xmlDocument);


En mi opinion no uses directamente ajax de esta forma. Aprende a utilizarlo con jQuery o alguna libreria, solucionaras muchos problemas. Parece que hago campaña con ciertas cosas pero es que sino se tiene mucha idea luego te puede dar dolores de cabeza por incompatibilidades.

Espero que funcione.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

extraer valor de nodos xml

Publicado por joaquin (2 intervenciones) el 15/12/2014 10:15:55
Hola amigos, muchas gracias por responder,

Vainas he hecho lo que me as dicho pero console.log(xmlDocument); no hace nada, ¿existe otra manera de imprimir o ver xmlDocument?

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas

extraer valor de nodos xml

Publicado por Vainas (71 intervenciones) el 25/12/2014 09:10:58
Buenas:

Si que hace, console.log() imprime en la consola de chrome o firefox. En chrome puedes abrir las "herramientas para desarrolladores" con F12

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar