Ir para conteúdo

Arquivado

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

paulopatto

[RESOLVIDO] Gerar um XML dinamicamente com PHP

Recommended Posts

Srs,

 

Bom dia, estou me atualizando quanto ao desenvolvimento com WEB STANDATS e AJAX (ver: http://forum.imasters.com.br/index.php?sho...p;#entry844654), assim já consigo ler o XML mas agora gostaria que esse XML fosse gerado dinâmicamente através das consultas feitas ao banco de dados. Assim estou fazendo de uma forma meio que porca:

<?php

print "<?xml version='1.0' encoding='utf-8'?>"; print "\n";

print "<states>"; print "\n";

print " <north>"; print "\n";

print " <state>Amazonas</state>"; print "\n";

print " <state>Acre</state>"; print "\n";

print " <state>Para</state>"; print "\n";

print " </north>";

print "\n"; ...

 

E assim por diante, acredito que essa não seja a formsa correta de retornar um XML através de um scritp PHP, mas como achei que o xmlHttpRequest() só enxergaria a saida do script fiz dessa forma "errônea".

 

Sendo assim qual seria a forma correta de gerar esse XML para que o AJAX possa lêr?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz uma busca por simplexml nas funções do php.net, encontrará vários exemplos faceis de se utilizar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha eu procurei em http://br.php.net/manual/pt_BR/ref.simplexml.php e no www.w3schools.com e não achei nada!

 

Assim Sobre o SimpleXML não consegui implementar oque eu queria.

Assim o retorno do PHP deve ser um documento XML ou seja algo que possa ser interpretado pelo responseXML do AJAX.

 

Vou tentar exemplificar o módulo para ver se talvez ajude na solução.

 

Vamos supor que, eu tenha uma página "principal.html", onde a mesma contenha todo o JavaScript que irá renderizar a página e talz. Só que a 'principal.html' faz algumas solicitações ao 'X_job.php', esse arquivo php, irá efetuar as buscas no MySQL, e retornar os dados num XML "LEGÍVEL" para o ajax. Outra funcionálidade é funcionar como um PROXY/GATWAY para efetuara buscas em serviços REST fora do domínio. Então oque irá acontecer:

 

principal.html -> X_job.php -> (serviços com retornos REST).resposta_do_rest -> X_job.php (processada a informação da resposta do rest) -> principal.html -> [saida]

 

Não sei se fui claro, qualquer coisa podem add no MSN paulopatto.hunter@hotmail.com, assim não entendo mais com fazer isso, busquei na net algo assim mas nada.

Tipo sei que é possível mas não sei como, poderia assim ecrever e gravar o arquivo .xml, mas isso é muiito porco de se fazer, em <JSP> sei que é possível pois já vi alguns exemplos.

 

Obrigado desde já

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Srs,

 

Boa noite, consgui chegar a solução do problema e para que em futuras ocasiões, possa ajudar outra pessoas vou postar ela aqui, lembrando que talvez não seja a implrmentação mais correta e por isso caso alguem saiba forma melhor, favor postar sua opinião e [sC].

Usarei como exemplo a aplicação que demonstrei no tópico cujo o link se encontra na minha primeira postagem(abertura).

 

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","parsePHP.php",true);*/	xmlHttp.open("GET","parsePHP.php",true);	/*Linha alterada*/	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>
o XML mudou para

parsePHP.php

<?php // ENGINER <XML>/*Estas linha fazem com que o documento de saída seja validado como XML */header('Content-Type: text/xml');header("Cache-Control: no-cache, must-revalidate");//A date in the pastheader("Expires: Mon, 26 Jul 1997 05:00:00 GMT");/*Restante sussa né?*/echo '<?xml version="1.0" encoding="ISO-8859-1"?><states>';echo "<north>";print "	<state>Amazonas</state>"; print "	<state>Acre</state>";print "	<state>Para</state>";print "	</north>";print "	<south>"; print "	<state>Rio Grande do Sul</state>"; print "	<state>Parana</state>"; print "	<state>Mato grosso</state>"; print "	</south>";print "	<east>"; print "	<state>Brasilia</state>";print "	<state>Goias</state>";print "	<state>Tocantins</state>";print "	</east>	";print "	<west>";print "	<state>Sao Paulo</state>";print "	<state>Rio de Janeiro</state>";print "	<state>Minas Gerais</state>";print "	<state>Espirito Santo</state>";print "	</west>";print "</states>";?>
Espero que com a minha resposta possa ajudar futuras dúvidas, o exemplo base para chegar a conclusão estava em http://www.w3schools.com/php/php_ajax_responsexml.asp mas não deixem de ver também http://br.php.net/manual/pt_BR/ref.simplexml.php. Obrigado ao companheiro que tentou ajudar, e aos que não puderam ficam também o muito obrigado, pois ninguem é obrigado a sebre tudo.

 

Valeu pessoal!

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.