Ir para conteúdo

POWERED BY:

Arquivado

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

programador php

criar função de Ler Xml

Recommended Posts

opa!

 

galera criei um script que lê uma arquivo XML, e caso tenham atributos ele também lê!!!

 

o grande lance agora é, colocar ele num função e ser recursivo!

 

segue o código

 

xml de teste [ pessoa.xml ]

<?xml version="1.0" ?>
<pessoa>
   <identificacao id="1">
	<nome>Joao</nome>
	<email>joao@mail.com</email>
   </identificacao>
   <identificacao id="2">
	<nome familia="ze" data="2">Maria</nome>
	<email>maria@mail.com</email>
   </identificacao>
</pessoa>

 

htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Ler XML by programador_php [ imasters forum ]</title>
	<script>
		
		function lerXml(nomeXML){
			if(window.XMLHttpRequest){
				var Loader = new XMLHttpRequest();
				Loader.open("GET", nomeXML ,false);
				Loader.send(null);
				return Loader.responseXML;
			}else if(window.ActiveXObject){
				var Loader = new ActiveXObject("Msxml2.DOMDocument.3.0");
				Loader.async = false;
				Loader.load(nomeXML);
				return Loader;
			}
		}
		
	function leAtributos(obj) {
		var texto = "";
		if (obj.nodeType == 1) {
			if (obj.attributes.length > 0) {
				for (z = 0; z < obj.attributes.length; z++) {
					texto += "nome do atributo de " + obj.nodeName + ": " + obj.attributes[z].nodeName +
							"=>" + obj.attributes[z].nodeValue + "<br />";
				}
			}
		}
		return texto;
	}
	
		var arquivo = lerXml("pessoa.xml");
		var str = "";
		
		for (i = 0; i < arquivo.childNodes.length; i++) {
			for (y = 0; y < arquivo.childNodes[i].childNodes.length; y++) {
				str += leAtributos(arquivo.childNodes[i].childNodes[y]);
				if (arquivo.childNodes[i].childNodes[y].nodeType == 1) {
					str += "nome do noh semi-principal: " +
					arquivo.childNodes[i].childNodes[y].nodeName +
					"<br />";
					for (w = 0; w < arquivo.childNodes[i].childNodes[y].childNodes.length; w++) {
						if (arquivo.childNodes[i].childNodes[y].childNodes[w].nodeType == 1) {
							str += "Nome do noh semi-semi-principal: " +
							arquivo.childNodes[i].childNodes[y].childNodes[w].nodeName +
							"<br />";
							str += leAtributos(arquivo.childNodes[i].childNodes[y].childNodes[w]);
							
							str += arquivo.childNodes[i].childNodes[y].childNodes[w].nodeName +
							"=> " +
							arquivo.childNodes[i].childNodes[y].childNodes[w].firstChild.nodeValue +
							"<br />";
						} 
					}
				}
			}

		}
		
	document.write ( str );

		
	</script>
</head>

<body>



</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

a duvida é como criar a função para que ela seja recursiva!

 

pois a que criei não entra nos nós e quando entra fica infinita!

 

abraço

 

function leNos(object) {
var str = "";
for (w = 0; w < object.childNodes.length; w++) {
						if (object.childNodes[w].nodeType == 1) {
							str += "Nome do noh semi-semi-principal: " +
							object.childNodes[w].nodeName +
							"<br />";
							str += leAtributos(object.childNodes[w]);
							
							str += object.childNodes[w].nodeName +
							"=> " +
							object.childNodes[w].firstChild.nodeValue +
							"<br />";
						}
					}
return str;

}

não sei onde colocar para chamar novamente essa leNos(object);

 

 

entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, olhando por alto tentaria aqui:

 

function leNos(object) {
var str = "";
for (w = 0; w < object.childNodes.length; w++) {
						if (object.childNodes[w].nodeType == 1) {
							str += "Nome do noh semi-semi-principal: " +
							object.childNodes[w].nodeName +
							"<br />";
							str += leAtributos(object.childNodes[w]);
							
							str += object.childNodes[w].nodeName +
							"=> " +
							object.childNodes[w].firstChild.nodeValue +
							"<br />";
						}

[b]str+=leNos(object.childNodes[w])[/b];// <-------------------------------------------aqui
					}
return str;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

dessa forma eu já fiz...

 

ai entrou em loop

 

function leNos(object) {
	var str = "";
	for (w = 0; w < object.childNodes.length; w++) {
		if (object.childNodes[w].nodeType == 1) {
			str += "Nome do noh semi-semi-principal: " +
					object.childNodes[w].nodeName +
					"<br />";
			str += leAtributos(object.childNodes[w]);
							
			str += object.childNodes[w].nodeName +
		   			"=> " +
					object.childNodes[w].firstChild.nodeValue +
					"<br />";
		}
		str+=leNos(object.childNodes[w]);
	}
	return str;
}	
	
	var arquivo = lerXml("pessoa.xml"); //carrega o xml
	document.write(leNos( arquivo ));

 

é assim que eu devo chamar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvido!

 

<script>
		
	 function lerXml(nomeXML){
			if(window.XMLHttpRequest){
				var Loader = new XMLHttpRequest();
				Loader.open("GET", nomeXML ,false);
				Loader.send(null);
				return Loader.responseXML;
			}else if(window.ActiveXObject){
				var Loader = new ActiveXObject("Msxml2.DOMDocument.3.0");
				Loader.async = false;
				Loader.load(nomeXML);
				return Loader;
			}
		}
		
	function leAtributos(obj, identa) {
		var texto = "";
		if (obj.nodeType == 1) {
			if (obj.attributes.length > 0) {
				for (z = 0; z < obj.attributes.length; z++) {
					texto += identa + "nome do atributo de " + obj.nodeName + ": " + obj.attributes[z].nodeName +
							"=>" + obj.attributes[z].nodeValue + "<br />";
				}
			}
		}
		return texto;
	}

	function leNos(arquivo, identa){
		var st = "";
		
		for(var i=0; i<arquivo.childNodes.length; i++){
			if( arquivo.childNodes[i].nodeType == 1 ) {
				
				st += "<br />" + identa + ">> " + " Nome do nó filho: " 
						+ arquivo.childNodes[i].nodeName;
				
				if ( arquivo.childNodes[i].attributes.length > 0 ) {
					st += leAtributos( arquivo.childNodes[i], identa+">>>>>>>>>>>>>>>>>>>>>>" );				
				}
				
				if ( arquivo.childNodes[i].childNodes.length > 0 ) {
					st += "=> " + arquivo.childNodes[i].firstChild.nodeValue + "<br />";
					st += leNos(arquivo.childNodes[i], ">>>>>>>>>>>>>>>" );
				}
							
				st += leNos(arquivo.childNodes[i], ">>>>>>>" );
				
			} 
		}
		
		return st;
	}


	
	var arquivo = lerXml("test.xml"); //carrega o xml
	document.write(leNos(arquivo,"")); //printa a árvore na tela 
		
		
		
	</script>

 

http://paulofernandesjr.blogspot.com/2008/...javascript.html

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.