JDOM é uma biblioteca que visa ser um modo simples de ler e escrever documentos XML. Vamos ver neste tutorial como criar um documento XML e como lê-lo de forma bastante simples.
Primeiramente vamos as classes chaves desta biblioteca:
Document: Esta classe representa o documento inteiro, esta classe pode ter apenas um elemento que seria o elemento raiz do documento(elemento root), comentários e outros elementos de definição.
Element: Esta classe representa um elemento do documento XML(também chamado de nó), são os elementos que compõem o documento ele pode conter outros elementos, atributos, comentários e valores.
Attribute: Esta classe representa um atributo de um elemento XML.
Vamos ao código então! Só não esqueça de baixar a biblioteca JDOM e incluí-la no seu CLASSPATH.
Document doc = new Document(); Element root = new Element("turma"); Element pessoa = new Element("pessoa"); Attribute sexo = new Attribute("sexo","Masculino"); pessoa.setAttribute(sexo); Element nome = new Element("nome"); nome.setText("Rodrigo"); pessoa.addContent(nome); Element sobrenome = new Element("sobrenome"); sobrenome.setText("sobrenome"); pessoa.addContent(sobrenome); Element notas = new Element("notas"); pessoa.addContent(notas); Element teste1 = new Element("teste1"); teste1.setText("8.3"); Element teste2 = new Element("teste2"); teste2.setText("7.8"); Element prova = new Element("prova"); prova.setText("9.2"); notas.addContent(teste1); notas.addContent(teste2); notas.addContent(prova); root.addContent(pessoa); doc.setRootElement(root); XMLOutputter xout = new XMLOutputter(); xout.output(doc , System.out);
Na linha 1 é criado o objeto que representa o documento XML, na linha 3 é criado o elemento raiz do documento e é passado para o construtor o nome do elemento, neste caso “turma”, é dentro deste elemento que iremos inserir cada elemento XML que irá representar uma pessoa, assim, dentro do elemento “turma” pode haver um ou vários elementos “pessoa”.
Na linha 5 é criado um elemento “pessoa” e nele será inserido as informações sobre a pessoa, como o sexo que será inserido como um atributo do elemento pessoa e para isso é criado um objeto de atributo na linha 6 e passado para o construtor como parâmetros o nome do atributo e seu valor. Na linha 7 é adicionado o atributo ao elemento “pessoa”.
Na linha 9 é criado um elemento nome, é definido um valor para ele na linha 10 e adicionamos este elemento “nome” ao elemento “pessoa” utilizando o método addContent, é importante lembrar a diferença deste método com o setContent, o método addContent adiciona o elemento passado por parâmetro ao conteúdo já existente dentro do elemento pai e o método setContent irá substituir o conteúdo anterior do elemento pai se houver.
Nas linhas 13, 14 e 15 é criado e atribuído o elemento de “sobrenome” da pessoa.
Na linha 17 é criado um elemento “notas” que irá conter outros elementos, que serão as notas da pessoa.
Da linha 20 até 25 é criado três elementos(“teste1″,”teste2″ e “prova”) e atribuído valores para eles. Nas linhas 27, 28 e 29 é inserido os elementos “teste1″, “teste2″ e “prova”, dentro do elemento “notas”.
Na linha 31 adicionamos o elemento “pessoa” ao elemento raiz do documento(elemento “turma”) e na linha 33 é adicionado o elemento turma como elemento root do documento através do método setRootElement.
Na linha 35 é criado um objeto XMLOutputter que é responsável por gerar o XML através do método output que recebe como parâmetro o objeto do documento a ser escrito e um OutputStream onde será enviado o XML, que no caso foi utilizado a saida padrão. Também poderia criar um outro OutputStream para um arquivo como no exemplo abaixo:
XMLOutputter xout = new XMLOutputter(); OutputStream out = new FileOutputStream( new File("exemplo.xml")); xout.output(doc , out);
A saida do exemplo será a seguinte:
<?xml version="1.0" encoding="UTF-8"?> <turma> <pessoa sexo="Masculino"> <nome>Rodrigo</nome> <sobrenome>sobrenome</sobrenome> <notas> <teste1>8.3</teste1> <teste2>7.8</teste2> <prova>9.2</prova> </notas> </pessoa> </turma>
Utilizando a mesma estrutura de documento XML veremos um exemplo de leitura:
File f = new File("exemplo.xml"); SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(f); Element root = (Element) doc.getRootElement(); List pessoas = root.getChildren(); Iterator i = pessoas.iterator(); while( i.hasNext() ){ Element pessoa = (Element) i.next(); System.out.println("Nome: " + pessoa.getChildText("nome")); System.out.println("Sobrenome: " + pessoa.getChildText("sobrenome")); System.out.println("Sexo: " + pessoa.getAttributeValue("sexo")); System.out.println("Nota( teste1 ): "+pessoa.getChild("notas").getChildText("teste1")); System.out.println("Nota( teste2 ): "+pessoa.getChild("notas").getChildText("teste2")); System.out.println("Nota( prova ): "+pessoa.getChild("notas").getChildText("prova")); System.out.println(); }
Na linha 1 é criado um objeto representando o arquivo XML a ser lido, na linha 3 é criado o objeto SAXBuilder que é responsável por converter o arquivo em um objeto do tipo Document da biblioteca JDOM.
Na linha 5 é construído o objeto Document através do método builder do SAXBuilder.
Na linha 7 é pego o elemento raiz do documento(elemento “turma”) utilizando o método getRootElement. Utilizando este objeto é chamado o método getChildren(linha 9) que retorna um objeto List com todos os elementos filhos, que no caso serão objetos pessoa.
Na linha 11 é definido um iterador para percorrer os elementos “pessoas” da lista.
Na linha 14 é utilizado a variável pessoa para armazenar cada objeto pessoa.
Na Linha 15 é utilizado o método getChildText do elemento “pessoa” que retorna o valor do elemento filho selecionado, no caso o elemento nome.
Na linha 17 é utilizado po método getAttributeValue que retorna o valor do atributo selecionado, no caso sexo.
Na linha 18 para pegar o valor do elemento “teste1″ é necessário primeiro selecionar o elemento “notas” já que o elemento “teste1″ se encontra dentro deste, para isso é utilizado o método getChild para somente depois utilizar o método getChildText para pegar o valor de “teste1″.
Como vimos é uma biblioteca bem simples de utilizar e quem já lidou um pouco com XML não deve ter nenhuma dificuldade.
0sem comentários ainda