Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Vital

le xml com javascript

Recommended Posts

para IE

var xml = new ActiveXObject("MSXML2.DOMDocument");xml.async = false;xml.load(xmlFile);alert(xml.xml);

para FF

var myXMLHTTPRequest = new XMLHttpRequest();myXMLHTTPRequest.open("GET", xmlFile, false);myXMLHTTPRequest.send(null);alert(myXMLHTTPRequest.responseXML);

simples

 

the void

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz a um tempo atrás algo que talvez te ajude.

 

O código abaixo carrega um arquivo XML (xmlMicoxLoader) e exibe sua estrutura na tela (xmlMicoxArvore).

Útil pra quem tem problemas ao tentar carregar xml em diferentes navegadores.

 

Versão:1.0

Autor: Micox

Testado em: Firefox 1.5, IE 6.0 (ainda não tive tempo de testar no opera, se alguem puder fazê-lo)

 

<script>function xmlMicoxLoader(url){  //by Micox: micoxjcg@yahoo.com.br.	if(window.XMLHttpRequest){		var Loader = new XMLHttpRequest();		Loader.open("GET", url ,false);		Loader.send(null);		return Loader.responseXML;	}else if(window.ActiveXObject){		Loader = new ActiveXObject("Msxml2.DOMDocument.3.0");		Loader.async = false;		Loader.load(url);		return Loader;	}}function xmlMicoxArvore(xmlNode,identacao){  //by Micox: micoxjcg@yahoo.com.br	var arvoreTxt="";	for(var i=0;i<xmlNode.childNodes.length;i++){//percorrendo os filhos do nó		arvoreTxt = arvoreTxt + identacao + xmlNode.childNodes[i].nodeName + ": "		if(xmlNode.childNodes[i].childNodes.length==0){		//se não tiver filhos eu já pego o nodevalue			arvoreTxt = arvoreTxt + xmlNode.childNodes[i].nodeValue + "\n";		}else if(xmlNode.childNodes[i].childNodes.length>0){		//se tiver filhos eu tenho que pegar o valor pegando o valor do primeiro filho			arvoreTxt = arvoreTxt + xmlNode.childNodes[i].firstChild.nodeValue + "\n";			arvoreTxt = arvoreTxt + xmlMicoxArvore(xmlNode.childNodes[i],identacao + "> > ");		}	}	return arvoreTxt;}xml = xmlMicoxLoader("teste.xml"); //carrega o xmldocument.write(xmlMicoxArvore(xml,"")); //printa a árvore na tela</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Micox, boa noite!Eu mato os caras do Firefox!Eu tô errado ou os caras pisaram na bola feio?Olha só!Tudo deveria seguir os padrões, certo? e a gente sofre quando isso não acontece. Pois é: Java, JavaScript, XML, DOM. Em todos, o primeiro elemento de um Array é 0. Pois bem, no Firefox os caras resolveram entender que:nivel = respostaServico.getElementsByTagName('nivel');for (var h = 0; h < nivel.length; h++){//pegando informações do documento XMLvar textoNivel = nivel[h].childNodes[1].firstChild.nodeValue;}Ora, se eu coloco childNodes[0], o infeliz dá erro. Isso ocorre tanto chamando pelo XMLHttpRequest quanto pelo document.implementation (DomDocument).Eu tô com muito sono ou isso é demais prá cabeça?Vicente Domingos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ora, se eu coloco childNodes[0], o infeliz dá erro. Isso ocorre tanto chamando pelo XMLHttpRequest quanto pelo document.implementation (DomDocument).

hehehe, calma. O FF só está fazendo o correto.O que está acontecendo é o seguinte:Para o firefox, espaços entre as tags e Enter's são interpretados como elementos do tipo #text.Para filtrá-los teste o nodeType: if(xmlNode.nodeType == 1){//ignorar espaços em brancoFiz um tutorial sobre xml e javascript. Dá uma zoiada pra ver se te ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Micox.Estou testando com o nodeType==1. Mas, será que com ele eu posso usar o mesmo childNodes[0] que funciona - normalmente - no IE?É que meu código já tá grande demais (cinco niveis embutidos uns nos outros - uns 300 itens de texto prá abrir e fechar). Imagine se eu tiver que copiar todo o código só pq o FF não aceita childNodes[0]. Eu preciso de umas férias!Vicente Domingos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ummm, se for assim então realmente não vai dar certo o esquema do nodeType não.

 

você vai ter que fazer um filtro normal mesmo:

 

nivel = respostaServico.getElementsByTagName('nivel');for (var h = 0; h < nivel.length; h++){//pegando informações do documento XMLif(document.all){  var textoNivel = nivel[h].childNodes[0].firstChild.nodeValue;}else{  var textoNivel = nivel[h].childNodes[1].firstChild.nodeValue;}}

Ou entao selecionar pelo tipo da tag:

nivel = respostaServico.getElementsByTagName('nivel');for (var h = 0; h < nivel.length; h++){//pegando informações do documento XMLvar textoNivel = nivel[h].getElementsByTagName('nome_tag')[0].firstChild.nodeValue;}

É só escolher o que se aplica melhor pra você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.