JDom

6 respostas
J

Pessoal

queria uma ajuda com JDom, tenho um XML e ele tem diversos nós (em variados niveis), como exemplo abaixo:

<mural>   
   <mensagem id="1" prioridade="5">     
      <para>Fulano</para>   
      <de>Beltrano</de>   
      <corpo>
	    <titulo>teste</titulo>
	    <resto>Testado</resto>
      </corpo>   
   </mensagem>   
</mural>

Consigo fazer ler todos os campos acima, exceto o que está dentro de corpo.

Olha meu código
public static void ler() throws JDOMException, IOException 
    {
             File f = new File("mural.xml");
	//Criamos uma classe SAXBuilder que vai processar o XML4 
        SAXBuilder sb = new SAXBuilder();
        
	//Este documento agora possui toda a estrutura do arquivo. 
        Document d = sb.build(f);
	
	//Recuperamos o elemento root   
        Element mural = d.getRootElement();
	
	//Recuperamos os elementos filhos (children)   
        List elements = mural.getChildren();
        Iterator i = elements.iterator();
        
	//Iteramos com os elementos filhos, e filhos do dos filhos   
        while(i.hasNext()) {
	
            Element element = (Element)i.next();
	    System.out.println("Códido:"+ element.getAttributeValue("id"));   
	    System.out.println("Prioridade:"+ element.getAttributeValue("prioridade"));   
	    System.out.println("Para:"+ element.getChildText("para"));   
	    System.out.println("De:"+ element.getChildText("de"));   
	    System.out.println("Corpo:"+ element.getChildText("corpo"));   
        }
    }

Alguem sabe me dizer como pegar os valores dentro da tag corpo?

6 Respostas

nextuser

será mais facil vc usar o xstream
xstream.codehaus.org/

J

Eu já xstream uma vez, mas dessa vez o projeto esta trabalhando com jdom e preciso manter a biblioteca.
Se não vira aquela salada e ninguem mais entende nada

G

Vc vai ter q pegar os elementos que tem dentro da tag corpo:

tipo..

element.getChild( "corpo").getChildText("titulo");

element.getChild( "corpo").getChildText("resto");

ou instanciar um Element corpo e usar so usar o getChildText

J

Valeu Goianinho

deu certo

J

Consegui resolver o problema acima, mas como eu tenho varios nós em vários niveis, precisei iterar para conseguir achar a tag que eu queria.

Olha meu xml

<enviMSG >
  <id></id>
  <msg>
    <infmsg versao="" Id="">
      <ide>
        <nome></nome>
        <email></email>
        <sexo></sexo>
        <contato></contato>
        <forPag></forPag>
      </ide>
      <div>
        <CaracAd></CaracAd>
        <xEmi></xEmi>
        <orig></orig>
        <dest></dest>
        <xObs></xObs>
      </compl>
      <emit>
        <CNPJ></CNPJ>
        <xNome></xNome>
        <enderEmit>
          <Bairro></Bairro>
          <Mun></Mun>
          <CEP></CEP>
          <UF></UF>
          <Pais></Pais>
          <fone></fone>
        </enderEmit>
      </emit>
      <dest>
        <CNPJ></CNPJ>
        <Nome></Nome>
        <enderDest>
          <Bairro></Bairro>
          <Mun></Mun>
          <CEP></CEP>
          <UF></UF>
          <Pais></Pais>
          <fone></fone>
        </enderDest>
      </dest>
    </infmsg>
  </msg>
</enviMSG>

Tentei pegar os dados assim:

element.getChild("msg").getChild("infmsg").getChild("ide").getChildText("nome")

mas não da certo…

eu queria pegar o valor mas não ficar iterando.

Será que tem como?

J

Pessoal, olha eu tendo problema com leitura de xml de novo

olha meu xml:

<enviMSG >   
  <id></id>   
  <msg>   
    <infmsg versao="" Id="">   
      <ide>   
        <nome></nome>   
        <email></email>   
        <sexo></sexo>   
        <contato></contato>   
        <forPag></forPag>   
      </ide>   
      <div>   
        <CaracAd></CaracAd>   
        <xEmi></xEmi>   
        <orig></orig>   
        <dest></dest>   
        <xObs></xObs>   
      </compl>   
      <emit>   
        <CNPJ></CNPJ>   
        <xNome></xNome>   
        <enderEmit>   
          <Bairro></Bairro>   
          <Mun></Mun>   
          <CEP></CEP>   
          <UF></UF>   
          <Pais></Pais>   
          <fone></fone>   
        </enderEmit>   
      </emit>   
      <dest>   
        <CNPJ></CNPJ>   
        <Nome></Nome>   
        <enderDest>   
          <Bairro></Bairro>   
          <Mun></Mun>   
          <CEP></CEP>   
          <UF></UF>   
          <Pais></Pais>   
          <fone></fone>   
        </enderDest>   
      </dest>   
    </infmsg>   
  </msg>   
</enviMSG>
meu codigo:
private void lendoXML( Vo vo , String xml) throws ParseException
    {
	try
	{
	    StringReader SR = new StringReader(xml); 
	    //Criamos uma classe SAXBuilder que vai processar o XML4 
	    SAXBuilder sb = new SAXBuilder();
	    
	    //Este documento agora possui toda a estrutura do arquivo. 
	    Document d = sb.build(SR);
	    
	    //Recuperamos o elemento root   
	    Element mural = d.getRootElement();
	    
	    //Recuperamos os elementos filhos (children)   
	    List elements = mural.getChildren();
	    Iterator i = elements.iterator();
	    
	    while(i.hasNext())
	    {
	        Element element = (Element)i.next();
	        if(element.getName().equals("msg"))
	        {
	            List elemento = element.getChildren();
	            
	            Iterator a = elemento.iterator();
	            while(a.hasNext())
	            {
	                Element elementa = (Element) a.next();   
                                System.out.println(elementa.getChild("infmsg").getChild("ide").getChildText("nome"));
                                System.out.println(elementa.getChild("infmsg").getChild("ide").getChildText("email"));
                            }
                       }
                     }
                }
}

Ai eh que ta o detalhe.....até ontem eu consegui fazer esse codigo funcionar... mas hoje quando fui testar, esta dando nullpointerException.

Alguem sabe me dizer porque ??? o que ta errado nisso??

e otra....a unica coisa feita hoje foi a validação do schema do xml... mas não foi alterada a estrutura...

Criado 15 de janeiro de 2009
Ultima resposta 29 de jan. de 2009
Respostas 6
Participantes 3