Atributos de atributos XML / XStream

5 respostas
R

Boa tarde forum.
Alguém por gentileza poderia me ajudar com o seguinte caso?

Desejo recuperar, com o XStream, atributos de atributos XML. Exemplo:

<individuos>
 <individuo data="03/05/2007" img="mt" origem="MT">
  <nome>Frodo</nome> 
  <mae>Froda</mae> 
  <pai>Aragorn</pai> 
  <sexo>M</sexo> 
 </individuo>
</individuos>

Como faço para recuperar os atributos ‘data’, ‘img’ e ‘origem’ do atributo ‘individuo’ ??? Até agora só sei como recuperar nome, mae, pai, etc…

Desde já agradeço aguma ajuda.
Vlw[]´s

5 Respostas

Y

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

I

Utilize DocumentBuilder, padronize o PARSER do seu XML:

Imports:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.*;

Exemplo básico:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        
             docBuilderFactory.setValidating(false);
             DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
             docBuilderFactory.setExpandEntityReferences(true);
             docBuilderFactory.setIgnoringElementContentWhitespace(true);
             
             doc = docBuilder.parse (new File(xmlInputfile));
             doc.getDocumentElement().normalize();

Exemplo leitura de atributos:

Pegando as Tags e Nós de filhos
NodeList nodeList = doc.getElementsByTagName("nome_da_tag");	
			Node nodeRegistro = nodeList.item(0);
			NodeList listRegistro = nodeRegistro.getChildNodes();
Pegando o elemento
Element elm = (Element)itemNode;

Pegando o Atributo do elemento ( aí tem o que voce quer... )

elm.getAttribute("nomedoatributoque voce quer")

Abraços!

R

Beleza cara valeu msm, só uma dúvida, no caso quem são as variáveis doc, xmlInputfile e itemNode?
Isso que vc fez é usando jaxb?
Já clareou, mas ainda tá um pouco confuso, se puder postar algum outro exemplo seria show, obrigado pela ajuda!

R

Fala, eu queria so saber se o exemplo que você postou era com jaxb, pois parece ser bem mais simples do que com XStream.
Mas no site do XStream tem um tuto sobre como pegar esses atributos, e eu acabei conseguindo fazer do jeito que eles ensinam, mas é meio chato a princípio você entender como funciona o Conversor, depois q vc saca isso também fica + tranquilo.

XStream Alias Tuto

Abraços, vlw a ajuda aí.

I

doc é um objeto do tipo Document, ele é o XML após feito o parser.
o método abaixo é um exemplo de como fazer "transformação" :

/**
     * Traz documento a partir de um caminho especificado, contendo XML
     * @param caminho
     * @return
     * @throws Exception
     */
    public Document getDocument(String xmlInputfile) throws Exception{
    	
    	 Document doc = null;
    	 try {
    		
             DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
        
             docBuilderFactory.setValidating(false);
             DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
             docBuilderFactory.setExpandEntityReferences(true);
             docBuilderFactory.setIgnoringElementContentWhitespace(true);
             
             doc = docBuilder.parse (new File(xmlInputfile));
             doc.getDocumentElement().normalize(); 
             
    	 } catch (Exception exc) {
    		 throw exc;
    	 }
         return doc;
    	
    }

para pegar os valores voce usa o exemplo que postei antes.

xmlInputFile = é uma String, caminho do arquivo que vc irá fazer o parser, ex: "c:\\teste\\teste.xml"

itemNode é um Node, objeto retirado de um NodeList, segue exemplo:

NodeList nodeList =doc.getElementsByTagName("nome_de_uma_tag");	
Node nodeDaTag = nodeList.item(0);    ( esse é um "itemNode" da tag de cima, na posição 0 da lista )

NodeList list = nodeRegistro.getChildNodes(); 
Node itemNode = list.item(1);   ( mais um item do NodeList agora na posição 1 )

Caso queira usar, de uma olhada nesses 2 link's sobre JAXB, no segundo tem downloads :

http://java.sun.com/developer/technicalArticles/WebServices/jaxb/
https://jaxb.dev.java.net/

Criado 3 de julho de 2007
Ultima resposta 4 de jul. de 2007
Respostas 5
Participantes 3