Você está na página 1de 6

Utilizando JDOM para ler e gerar XML

Se voc j usou XML em alguma aplicao Java e utilizou das APIs DOM ou SAX ento com certeza voc j se deparou com a complexidade delas. Foi pensando nisso que Jason Hunter e Brett McLaughlin criaram essa fantstica e to simples API denominada JDOM. Antes de iniciarmos importante lembrar que o JDOM no um parser, como o Xerces ou o JAXP, ele uma API que facilita a criao e atualizao de documentos XML. Por definio ele configurado para utilizar o JAXP mais pode ser configurado para usar a maioria dos parsers existentes. Nesse tutorial estarei explicando como criar e como ler documentos XML e no prximo veremos conceitos mais avanados como validao e atualizao, utilizaremos como um exemplo prtico um cadastro de mensagens. Vale lembrar que em primeiro lugar devemos definir bem a estrutura dos documentos XML, mais isso no ser visto aqui, uma vez que no o objetivo deste tutorial. Consideramos a seguinte estrutura: 1. <mural> 2. 3. 4. 5. 6. <mensagem id="" prioridade=""> <para></para> <de></de> <corpo></corpo> </mensagem>

7. </mural>
<mural> <mensagem id="" prioridade=""> <para></para> <de></de> <corpo></corpo> </mensagem> </mural>

O exemplo acima podeira ser utilizado para a criao de um sistema de mensagens ou um mural onde as pessoas vo inserindo suas mensagens que ficaro disponveis para os outros usurios, ou tambm dentro de um organizao para facilitar a troca de informaes entre os funcionrios. 1- Criando um documento XML. Antes de criarmos um documento, vamos conhecer um pouco da API JDOM que representa um documento XML bem como todas as suas propriedades: Document: Esta classe representa um documento xml inteiro, esta pode conter apenas um elemento que denominado root, comentrios e outros elementos de definio. Element: Esta classe representa um elemento XML, um elemento XML tambm conhecido como n pode conter outros elementos, atributos e comentrios alm claro de um valor. Attribute: Esta classe representa um atributo que pode ser atribuido a um elemento. Comment: Esta classe representa um comentrio em XML, os comentrios em XML so representados com a seguinte sintaxe . medida em que vamos percorrendo o tutorial, vamos conhecendo cada vez mais a API JDOM. A documentao completa pode ser vista atravs do link no fim deste tutorial. Vamos ao cdigo. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. //"Setando" outro atributo agora utilizando da classe Attribute Attribute prioridade = new Attribute("prioridade","-1"); mensagem.setAttribute(prioridade); //"Setando" os atributos mensagem.setAttribute("id", "01"); //Declarao dos elementos que iro compor a estrutura do docum ento. Element mural = new Element("mural"); Element mensagem = new Element("mensagem"); Element para = new Element("para"); Element de = new Element("de"); Element corpo = new Element("corpo");

14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. //Imptrimindo o XML XMLOutputter xout = new XMLOutputter(" ", true); xout.output(doc, System.out); //Criando o documento XML (montado) Document doc = new Document(); doc.setRootElement(mural); mural.addContent(mensagem); mensagem.addContent(para); mensagem.addContent(de); mensagem.addContent(corpo);

//Declarao dos elementos que iro compor a estrutura do documento. Element mural = new Element("mural"); Element mensagem = new Element("mensagem"); Element para = new Element("para"); Element de = new Element("de"); Element corpo = new Element("corpo"); //"Setando" os atributos mensagem.setAttribute("id", "01"); //"Setando" outro atributo agora utilizando da classe Attribute Attribute prioridade = new Attribute("prioridade","-1"); mensagem.setAttribute(prioridade); mensagem.addContent(para);

Da linha 1 6 so declarados os elementos que iro compor o corpo do documento, repare que os nomes dados aos objetos so iguais ao nome do elemento que cada um corresponde, isso para facilitar no desenvolvimento (e tambm uma boa prtica de programao). A linha 8 faz a insero do atributo id no elemento mensagem atravs de uma das declaraes do mtodo setAttribute. As linhas 11 e 12 fazem a insero de um segundo atributo no elemento mensagem, desta vez, utilizando de um objeto da classe Attribute. O mtodo setAttribute ainda possui ainda duas outras variaes a primeira que recebe o nome, o valor e o namespace do atributo e a outra que recebe um objeto do tipo java.util.List. Quote: Apesar da API JDOM dar suporte completo a namespaces, esse conceito no ser visto nesse tutorial.

Nas linhas 14 16 adicionamos ao elemento elementos(children) que compem o seu corpo.

mensagem,

os

O elemento root segundo o documento que definimos acima, o elemento mural. Este por sua vez possui outros elementos que esto sendo adicionados na linha 18. Repare que o elemento mural apenas um elemento comum at agora, oque mostra a facilidade de criamos a estrutura do documento, somente adicionando filhos um elemento pai. Na linha 21 estamos declarando e inicializando um documento, este documento apenas uma declarao de documento vazia, uma vez que ainda no possui um elemento root, na linha 22 estamos informando que o elemento "mural" ser o elemento root para este documento. Finalizando, na linha 25 e 26 criamos um objeto XMLOutputter e mandamos escrever o documento na saida padro, repare na flexibilidade que a classe XMLOutputter nos oferece, podemos "escrever" com ela qualquer elemento, comentrio atributo em qualquer sada OutputStream, falaremos mais sobre a classe XMLOutputter durante o decorrer do tutorial (prxima parte, JDOM Intermedirio). Quote: Agora que voc j sabe como escrever documentos XML, que tal reescrever o cdigo acima para gerar seus arquivos?

-------------------------2- Lendo arquivos XML Agora que j conhecemos as classes que compem a estrutura de um documento ficar mais fcil para lermos os arquivos, uma vez que o processo o contrrio da escrita e isso se torna mais evidente ainda na utilizao da API JDOM. Agora apresentarei a vocs uma classe que ser vossa parceira por muitos programas, ela reponsvel pela leitura dos arquivos XML. SAXBuilder: utilizada para construir a rvore XML partir de um arqivo ou streams utilizando SAX. Outra classe de entrada muito importante a classe DOMBuilder, que executa a mesma tarefa que a SAXBuilder, mas mais lenta pois antes de disponibilizar os valores ela precisa carregar toda a rvore XML ns memria. Para esse tutorial iremos utilizar a classe

SAXBuilder, mais voc pode fazer experimentos com a DOMBuilder apenas substituindo as classes. Consideramos que tenhamos um arquivo no diretrio raiz chamado mural.xml Vamos ao cdigo:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.

//Aqui voc informa o nome do arquivo XML. File f = new File("c:/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("Cdido:"+ element.getAttributeValue("id")); System.out.println("Prioridade:"+ element.getAttributeValue("prio ridade")); System.out.println("Para:"+ element.getChildText("para")); System.out.println("De:"+ element.getChildText("de")); System.out.println("Corpo:"+ element.getChildText("corpo")); }

//Aqui voc informa o nome do arquivo XML. File f = new File("c:/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();

Na linha 1 definimos o arquivo XML que iremos processar. Em seguida na linha 4 criamos uma classe SAXBuilder que ser usada para processar o arquivo. O mtodo build(File) que possui ainda outras assinaturas, cria um documento (Document) que ir conter a estrutura do arquivo que definimos. Aps isso, recuperamos o elemento root, linha 10, e em seguinda todos os elementos filhos do elemento root, linha 13. Na iterao dos elementos, linha 17, utilizamos de mtodos "get" para pegarmos os valores de contedo e dos atributos, como pode ser visto nas linhas 19 23. J est em fase de desenvolvimento um novo tutorial que tratar de aspctos mais avanados do JDOM e ter como pr-requisito a leitura deste.

Você também pode gostar