Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problemas al acceder a contenido xml

Estas en el tema de Problemas al acceder a contenido xml en el foro de Frameworks JS en Foros del Web. Hola, estoy recuperando un documento xml con ajax y me estoy volviendo loco para acceder a los datos del documento... El documento xml lo recibe ...
  #1 (permalink)  
Antiguo 10/10/2009, 04:13
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Problemas al acceder a contenido xml

Hola, estoy recuperando un documento xml con ajax y me estoy volviendo loco para acceder a los datos del documento... El documento xml lo recibe bien ya que el firebug lo muestra en las peticiones, pero no sé como hacer que muestre la información recibida:

Documento XML:
Código:
<?xml version="1.0" encoding="ISO-8859-1"?>
<MARCAS>
<MARCA id="1">
<NOMBRE>Chevrolet</NOMBRE>
<ANOFUNDACION>1911</ANOFUNDACION>
<MODELOS>Matiz, Cruze, Captiva</MODELOS>
<WEB>chevrolet.com/worldwide/</WEB>
</MARCA>
<MARCA id="2">
<NOMBRE>Volkswagen</NOMBRE>
<ANOFUNDACION>1937</ANOFUNDACION>
<MODELOS>Polo, Golf, Touareg</MODELOS>
<WEB>volkswagen.com/</WEB>
</MARCA>
<MARCA id="3">
<NOMBRE>Audi</NOMBRE>
<ANOFUNDACION>1909</ANOFUNDACION>
<MODELOS>Q7, TT, R8</MODELOS>
<WEB>audi.com/</WEB>
</MARCA>
</MARCAS>
Parte de la función que trata los datos:
Código:
function cargarXML(marca){
		var objAJAX=crearMotorAJAX();
		objAJAX.open('GET', 'marcas.xml', true);

		objAJAX.onreadystatechange = function(){
			if(objAJAX.readyState == 4)
			{
				var docXML = objAJAX.responseXML;
				document.getElementById('txtMarca').innerHTML = docXML.getElementById('marcas').firstChild.nodeValue;
			}
		}
		objAJAX.send(null);
	}
Hasta la línea "document.getElementById('txtMarca').innerHTML = docXML.getElementById('marcas').firstChild.nodeVal ue;" funciona bien ya que si pongo = 'pepe' muestra pepe. ¿Cómo accedo al contenido del xml?
  #2 (permalink)  
Antiguo 10/10/2009, 05:09
Avatar de josec89  
Fecha de Ingreso: octubre-2009
Mensajes: 12
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problemas al acceder a contenido xml

Hola!

Para acceder a las partes de un documento XML tienes que usar XML.getElementsByTagName(...), ya que XML - por lo general - no trabaja con ids sino con tags (etiquetas).

Así pues, yo quitaría las IDS de tu código XML y utilizaría el siguiente sistema para acceder a las etiquetas:

Código:
//docXML contiene <MARCAS>......</MARCAS>
var docXML = objAJAX.responseXML.getElementsByTagName("MARCAS")[0];

//marca contiene <MARCA>..... </MARCA> (según seleccionemos 0 1 2 será uno u otro;
var marca = docXML.getElementsByTagName("MARCA")[0 .. 1 .... 2];

//nombre contiene <NOMBRE>....</NOMBRE> de la marca actual (0 1 2, según hayas puesto arriba)
var nombre = marca.getElementsByTagName("NOMBRE")[0];

//nombre.firstChild.nodeValue es lo que hay dentrode <NOMBRE>...</NOMBRE>
alert(nombre.firstChild.nodeValue)
Para el resto de etiquetas internas (anofundacion, web...) se haría igual que el último caso. Por cierto, yo cambiaría la estructura de MODELOS por:

<MODELOS>
<MODELO>QT</MODELO>
<MODELO>R6</MODELO>
</MODELOS>

Porque así si contienes una variable con MODELOS:

var modelos = marca.getElementsByTagName("MODELOS")[0];

Puedes seleccionar cada modelo:
Código HTML:
var modelo = new Array();
var i = 0;

while(modelos.getElementsByTagName("MODELO")[ i ])
{
  modelo[i] = modelos.getElementsByTagName("MODELO"[ i ].firstChild.nodeValue;
  i++;
}
Así guardariamos tods los modelos en un array, sin tener que procesar la string QT, R6....

Espero que te sirva de ayuda, un saludo ^^
  #3 (permalink)  
Antiguo 10/10/2009, 10:17
 
Fecha de Ingreso: septiembre-2009
Mensajes: 47
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problemas al acceder a contenido xml

Gracias! Ya lo he conseguido hacer con tus comentarios, me han sido de mucha utilidad.

Gracias de nuevo.
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 08:06.