Percorrer XML

Bom dia.
Alguém poderia ajudar em como fazer um loop que percorra um xml?

Estou fazendo da seguinte maneira, e assim consigo pegar o primeiro indivíduo.

Porém na próxima passagem do loop, preciso pegar o próximo indivíduo, e assim por diante, até percorrer todos os indivíduos, e é nesta parte que fiquei ‘agarrado’…

[code]public class MultiReturn
{
public static void main(String[] args)
{
/int qtd = 2;
for(int i=0; i>=qtd; i++)
{
String[] str1 = ret.split("");
String[] str2 = str1[1].split("");
//String respostaFinal = str1[0]+str2[1];
System.out.println(str2[1]+"");
}
/

	String[] str1 = ret.split("<individuos>");
	String[] str2 = str1[1].split("</individuo>");
	//String respostaFinal = str1[0]+str2[1];
	System.out.println(str2[1]+"</individuo>");
}	
	static String ret =		
	"<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"+ 
	" <page>"+				
	" <individuos>"+		
	"  <individuo data=\"03/05/2007\">"+
	"   <rg>99999999-9</rg>"+		 
	"   <nome>Joao</nome>"+		 
	"  </individuo>"+		
	" <individuo data=\"25/05/2007\">"+
	"  <rg>88888888-8</rg>"+		 
	"  <nome>Jose</nome>"+		 
	"  </individuo>"+
	" <individuo data=\"25/05/2007\">"+
	"  <rg>77777777-7</rg>"+		 
	"  <nome>Andre</nome>"+		 
	"  </individuo>"+
	" </individuos>"+		
	" </page>";	

}[/code]

Agradeço desde já alguma ajuda.
Vlw[]´s

Já tentaste usar algo que já consome o XML e você só trabalha com os objetos?
Procure por XStream.

Até!

http://www.java2s.com/Code/Java/XML/CatalogXML.htm

Amigo, vc ja postou a mesma dúvida não foi?

No seu outro post vc falou que está usando o XStream.

Sendo assim pq vc não está conseguindo ler?

Esse é o código de uma aplicação minha…

XStream xstream = new XStream();
Avaliacao av = new Avaliacao();
        
// define as classes para as tags
xstream.alias( "avaliacao", Avaliacao.class );
xstream.alias( "caracteristicas", Caracteristicas.class );
xstream.alias( "perguntas", Perguntas.class );
xstream.alias( "pergunta", Pergunta.class );
xstream.alias( "respostas", Respostas.class );
xstream.alias( "resposta", Resposta.class );
        
// define os campos que são ArrayList nas classes
xstream.addImplicitCollection( Perguntas.class, "pergunta" );
xstream.addImplicitCollection( Respostas.class, "resposta" );

// carrega o xml criando as classes
xstream.fromXML( "XML AQUI", av );

Avaliação é a classe que representa a tag root. Dentro da avaliação tenho
Caracteristicas (apenas atributos String), Perguntas (um ArrayList de Pergunta), Pergunta (atributos String), Respota(um ArrayList de Respostas), Respostas (atributos string).

Dá uma olhadinha nos exemplos do XStream e usa o que eu estou te passando q vc vai conseguir.

Até mais!

Use o XStream ou entao o JAXB da Sun q é muito bom.

jaxb =
http://java.sun.com/webservices/docs/1.6/api/javax/xml/bind/Marshaller.html
Marshaller faz o parse de Objeto java pra xml e o UnMarshaller de XML para Objeto java.

XStream =
http://xstream.codehaus.org/tutorial.html
respectivamente toXML() e fromXML()

Se tiver dificuldades de como usar é só falar.

abraços

favor ler abaixo

Ae pessoall, brigadão pela ajuda.

Eu já uso o xstream sim, e está funcionando bem, minha dúvida foi só em relação a como recuperar varias tags com nome igual no xml.
Ele está dando um erro justamente de campo duplicado

Mensagem no console:

[quote]---- Debugging information ----
duplicate-field : individuo
class : actions.Page
required-type : actions.Individuos
path : /page/individuos/individuo[2]
line number : 1

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$DuplicateFieldException: individuo
---- Debugging information ----
duplicate-field : individuo[/quote]

Preciso fazer algo como: private Individuo[] individuo;

<?xml version="1.0" encoding="UTF-8" ?> <page> <individuos> <individuo data="03/05/2007"> <rg>99999999-9</rg> <nome>Joao</nome> </individuo> <individuo data="25/05/2007"> <rg>88888888-8</rg> <nome>Jose</nome> </individuo> <individuo data="25/05/2007"> <rg>77777777-7</rg> <nome>Andre</nome> </individuo> </individuos> </page>

Assim eu poderia prencher cada dimensão do objeto com os vários indivíduos que vierem no xml. É possível?
Agradeço pela ajuda.

Você leu minha resposta acima?

Lí sim…obrigado.
Porém pelo que ví no site do xstream, o método addImplicitCollection() serve para esconder a tag com o nome de um objeto:
( xstream site tuto )

[quote]Omit the ‘entries’ tag

Now let’s implement what was called an implicit collection: whenever you have a collection which doesn’t need to display it’s root tag, you can map it as an implicit collection.

In our example, we do not want to display the entries tag, but simply show the entry tags one after another.

A simple call to the addImplicitCollection method shall configure XStream and let it know that we do not want to write the entries tag.[/quote]

Se este método também guarda arrayLists como você disse, eu não sei, pois o único resultado que eu estou tendo com este método é exatamente o de omitir as tags.
Talvez a solução não esteja exatamente aí.

Amigo,

por curiosidade, conseguiu resolver este problema??
Estou recebendo o mesmo erro(duplicate-field) em uma rotina simples (AQUI MEU ERRO), e imagino ser algo realmente simples de resolver tb.

http://www.guj.com.br/posts/list/68276.java

[]´s

Carlos