Trabalhando com o XStream

Bom pesquisei bastante sobre o XStream e ele me chamou muito a atenção pela enorme facilidade em gerar e ler arquivos XML. Bom mas eu tenho uma dúvida em relação a isso, quero consultar um nó específico de um XML. Por exemplo:

<Pessoa nome="Anderson">
    <Telefone numero="1132584892" ddd="11">            
    </Telefone>
    <Endereco rua="bla bla" numero="123" bairro="centro" estado="SP">
    </Endereco>
</Pessoa>

Gerar este XML não é o problema. Mas consultar um nó especifico deste XML que eu não consegui. Por exemplo quero somente carregar o Telefone da pessoa chamada Anderson. Vi na documentação que é possível facilmente converter o XML novamente no objeto “primitivo”, que no caso é seria o objeto Pessoa.

Pessoa anderson = (Pessoa) xstream.fromXML(xml);

Mas não quero carregar este objeto todo para conseguir tal informação, quero somente carregar o telefone da pessoa chamada Anderson. Como posso fazer isto utilizando o XStream?
Obrigado pela ajuda desde já.

Anderson,

A API do XStream obriga voce a carregar o xml completo, para tal funcionalidade que necessita voce deve utilizar outra api, um jdom por exemplo.

valeu!

Entendi… e como eu posso trabalhar com o Jdom para tal busca no XML? Tem algum exemplo simples? as buscas seriam simples… só queria carregar o objeto interio de um nó e não os valores de seus atributos individualmente.

aqui mesmo no guj tem um tutorial, mas se você for considerar facilidade, acho que você vai voltar pro xstream mesmo…rs

a menos que sua planilha seja muuuuuuuuuuuuuuuuuito grande é claro…

É eu li o tutorial indicado e percebi uma maior complexidade. Mas este tutorial creio que não resolveria meu problema… vou expressa-lo de uma forma melhor. Seja o seguinte XML:

  <Empresa nome="Intel">
     <Funcionario nome="Anderson">  
          <Telefone numero="1132584892" ddd="11">              
          </Telefone>  
          <Endereco rua="bla bla" numero="123" bairro="centro" estado="SP">  
          </Endereco>  
     </Funcionario> 
  </Empresa>

Bom no exemplo que vi no tutorial seria possível por exemplo pegar os nomes do Funcionário da empresa. Mas eu queria pegar o telefone deste funcionário (Anderson). O exemplo no tutorial não foi bem claro como isto é possível, alguém poderia me ajudar a respeito?

Já conseguiu resolver o problema?
Vê se isso ajuda.

			db = dbf.newDocumentBuilder();
			Document doc = db.parse(seu arquivo.xml);		
			
			//Passo 1: obter o elemento raiz (<Empresa>)
			Element raiz = doc.getDocumentElement();

			//Passo 2: localizar os elementos filhos do Empresa (<Funcionario>)
			NodeList listaTipo = raiz.getElementsByTagName("Funcionario");
			
			//Passo 3: obter os elementos de cada tipo Funcionario
			for (int i=0; i<listaTipo.getLength(); i++){
				//como cada elemento do NodeList é um nó, precisamos fazer o cast
				Element tipo = (Element) listaTipo.item(i);				

				//Passo 4: obtém o Telefone de cada funcionario
				NodeList listaNomes = tipo.getElementsByTagName("Telefone");

				...
			}

Juino, pelo que entendi é isso mesmo que ele quer, porém não tenho certeza se resolve muito, pois utilizando “Document doc = db.parse(seu arquivo.xml);” imagino que ele carregaria o arquivo inteiro em memória da mesma forma do Xtream, o que computacinalmente seria equivalente.
Dessa maneira ja aconselharia o uso do Xtream mesmo, por ser mais prático e de fácil manutenção.

Concordo com o douglaspaulino.
Bom qual seria a limitação de tamanho do XStream para carregar arquivos xml, a nível de performance? creio que meus arquivos não ultrapassariam 1 MB.

anderson,
nao sei responder essa pergunta nao rsrsrsrsrs.
mas imagine… esse xml irá gerar um objeto empresa e provavelmente uma lista de funcionarios, logo vc precisará ter memória suficiente para carregar essa lista.

mas quanto a performace nao sei te responder mesmo, pois utilizo o Xtream apenas para arquivos de configuração (1k) hehehe

Bom tenho a seguinte duvida ainda em relação ao XStream, tenho um XML relativamente com muitos nós, eu preciso montar uma estrutura igual de Objetos para carregar este XML em memória e manipula-los em objetos se eu for usar o XStream? Pois eu gostaria somente de carregar certos objetos, e por não conhecer a estrutura inteira do XML. Obrigado se alguém tiver alguma dica.

O XStream foi feito pra serializar e deserializar objetos em XML.

Não acho uma boa idéia usa-lo pra ler qualquer XML, principalmente XML que vc não conhece.

Se você quer ler XML use DOM com XPath que foi feito pra isso é bem fácil.

Entendi, eu imaginei isso mesmo depois de alguns testes, vc teria algum material que possa me recomendar pra resolver meu problema?

Consegui resolver meus problemas, com o metodo getChild… obrigado pelas dicas, mas quem me salvou foi o livro do Deitel sobre XML recomendo a todos!
Pode fechar o tópico