Ir para conteúdo

Arquivado

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

paulopatto

Erro na Leitura de <XML>

Recommended Posts

Srs,

 

Por gentileza solicito a ajuda no seguinte tópico. Recentemente comprei um livro "Fundamentos do Ajax" [Ryan Asleson e Nathaniel T. Schutta - ed.Alta Books] para poder me interar e aprender algo sobre ajax. No livro um dos primeiros exercicios é uma leitura simples de arquivo <XML> onde tem uma listagem de estados e você escolhe quais exibir. Ok Beleza só que acho que está faltando algum parametro de leitura do XML para que o mesmo consiga ver os valores, pois se eu uso o document.write ele retorna como [object XMLDocument] ou

. Como posso resolver isso?

SEGUEM OS FONTES PARA FACILITAR (nomes de valores e nomes de arquivos alterados mas a estrutura é a mesma das páginas 44 e 45 do livro para quem tem ou conhece):

 

parseXML.xml

<?xml version="1.0" encoding="utf-8"?><states>	<noth>	<state>Amazonas</state>	<state>Acre</state>	<state>Par�</state>	</noth>		<south>	<state>Rio Grande do Sul</state>	<state>Par�n�</state>	<state>Mato grosso</state>	</south>		<east>	<state>Brasilia</state>	<state>Goi�s</state>	<state>Tocantins</state>	</east>			<west>	<state>S�o Paulo</state>	<state>Rio de Janeiro</state>	<state>Minas Gerais</state>	</west></states>

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>	<head>		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />		<title>Untitled Document</title>	</head>	<body>	<script language="JavaScript" type="text/javascript">	var xmlHttp;	var requestType = "";	function createXMLHttpRequest(){	if(window.ActiveXObject){xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}	else if(window.XMLHttpRequest){xmlHttp = new XMLHttpRequest();}}function outputList(title, states){	var out = title;	var currentState = null;	for(var i=0;i<states.length;i++){		currentState = states[i];		out = out + "\n" + currentState.childNodes[0].nodeValue;			}	window.alert(out);}function listNorthStates(){	var xmlDoc = xmlHttp.responseXML;	var northNode = xmlDoc.getElementsByTagName("north")[0];		var out = "Estados do Norte";	var northStates = northNode.getElementsByTagName("state");			outputList("Estados da Região Norte", northStates);}function listAllStates(){	var xmlDoc = xmlHttp.responseXML;	document.getElementById("testes").innerHTML = xmlDoc;	var allStates = xmlDoc.getElementsByTagName("states");	//document.write(allStates.nodeValue);	document.write("Variavel " + xmlDoc);	outputList("Todos os Estados",allStates);}function handleStateChange(){	if(xmlHttp.readyState == 4){		if(xmlHttp.status == 200){			if(requestType=='north'){listNorthStates();}			else if(requestType=='all'){listAllStates();}		}	}}function startRequest(requestList){	requestType = requestList;	createXMLHttpRequest();	xmlHttp.onreadystatechange = handleStateChange;	xmlHttp.open("GET","parseXML.xml",true);	xmlHttp.send(null);}	</script>	<h3>Processador de XML</h3>	<br/><br/>	<form action="#">	<input type="button" value="Ver Todos" onclick="startRequest('all')"/><br/>	<input type="button" value="Ver Norte" onclick="startRequest('north')"/><br/>	</form>	<div id="testes"></div>	</body></html>
Será que alguem pode me ajudar ou um exemplo simples de leitura de XML? (Já sei vão mandar procurar nas colunas iMasters, mas eu dei uma procura meio que "por cima" e não achei nada nem lá nem cá no forum.)

 

Meu endereço de correio eletrônico: paulopatto [at] gmail [dot] com

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal valeu, achei a solução e onde estava o erro.

 

var allNode = xmlDoc.getElementsByTagName("states")[0]; /*AQUI BUG*/

Faltava essa linha!

 

Em anexo o código funcionando:

index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html>	<head>			<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />			<title>Untitled Document</title>	</head>	<body>	<script language="JavaScript" type="text/javascript">	var xmlHttp;	var requestType = "";		function createXMLHttpRequest(){		if(window.ActiveXObject)	{		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");	}		else if(window.XMLHttpRequest)	{		xmlHttp = new XMLHttpRequest();	}}function outputList(title, states){		var out = title;		var currentState = null;			for(var i=0;i<states.length;i++)	{				currentState = states[i];				out = out + "\n" + currentState.childNodes[0].nodeValue;				}		window.alert(out);}function listNorthStates(){		var xmlDoc = xmlHttp.responseXML;		var northNode = xmlDoc.getElementsByTagName("north")[0];			var out = "Estados do Norte";		var northStates = northNode.getElementsByTagName("state");					outputList(out, northStates);}function listAllStates(){		var xmlDoc = xmlHttp.responseXML;		var allNode = xmlDoc.getElementsByTagName("states")[0];	/*AQUI BUG*/	var out = "Todos os Estados";	var allStates = allNode.getElementsByTagName("state")	outputList(out, allStates);}function handleStateChange(){		if(xmlHttp.readyState == 4)	{				if(xmlHttp.status == 200)		{						if(requestType=='north')			{				listNorthStates();			}						else if(requestType=='all')			{				listAllStates();			}				}		}}function startRequest(requestList){		requestType = requestList;		createXMLHttpRequest();		xmlHttp.onreadystatechange = handleStateChange;		/*xmlHttp.open("GET","parseXML.xml",true);*/	xmlHttp.open("GET","parseXML.xml",true);		xmlHttp.send(null);}	</script>		<h3>Processador de XML</h3>	<br/><br/>		<form action="#">			<input type="button" value="Ver Todos estados" onclick="startRequest('all')"/><br/>			<input type="button" value="Ver Norte" onclick="startRequest('north')"/><br/>		</form>		<div id="testes">	</div>	</body></html>
parseXML.XML

 

<?xml version="1.0" encoding="utf-8"?><states>	<north>	<state>Amazonas</state>	<state>Acre</state>	<state>Pará</state>	</north>		<south>	<state>Rio Grande do Sul</state>	<state>Paraná</state>	<state>Mato grosso</state>	</south>		<east>	<state>Brasilia</state>	<state>Goiás</state>	<state>Tocantins</state>	</east>			<west>	<state>São Paulo</state>	<state>Rio de Janeiro</state>	<state>Minas Gerais</state>	<state>Espirito Santo</state>	</west></states>

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.