Beruflich Dokumente
Kultur Dokumente
Glaucio Guerra
Adaptado de [http://www.devmedia.com.br/manipulando-arquivos-xml-com-o-jdom-parte-i-escrevendo-arquivos/3330]
A tag Contato representa o registro da tabela Agenda. As tags nome, endereo, telefone e e-mail compem a chave Contato, representando os campos de uma tabela. A Agenda a representao do documento inteiro, tambm podendo ser chamada de root. Vale lembrar que dentro de cada arquivo XML possvel inserir apenas um elemento deste tipo. Agora vamos descrever algumas classes da API do JDOM que representar o nosso pequeno Banco de Dados. Toda tag representada pela classe org.jdom. Element. J os documentos XML so representados pela classe org.jdom.Document. No nosso caso, a tag Agenda o Document, lembrando que ela tambm um Element. Assim sendo, o cdigo ficaria da seguinte forma:
Element agenda = new Element("Agenda"); Document myDocument = new Document(agenda);
Tambm precisamos definir um atributo chamado id para a tag Contato para identificarmos os dados de uma determinada pessoa fsica, por exemplo. Confira o cdigo:
Element contato = new Element("Contato"); contato.setAttribute("id","123");
Element telefone = new Element("telefone"); telefone.setText("123-456"); Element endereco = new Element("endereco"); endereco.setText("Av. Amaral Peixoto S/N"); Element email = new Element("email"); email.setText("glaucioguerra@gmail.com");
Para imprimir o arquivo que ns criamos, precisamos de um XMLOutputter. Esta classe recebe como parmetro um OutputStream ou um Writer. Vamos exibir o arquivo na sada padro, por exemplo:
XMLOutputter xout = new XMLOutputter(); try { xout.output(documento, System.out); } catch (IOException e) { e.printStackTrace(); }
public class Main { public static void main(String[] args) { Element agenda = new Element("Agenda"); //Define Agenda como root Document documento = new Document(agenda); //Cria o elemento Contato Element contato = new Element("Contato"); //Adiciona o atributo id ao Contato contato.setAttribute("id","123"); //Criando os elementos de contato Element nome = new Element("nome"); nome.setText("Glaucio Guerra"); Element telefone = new Element("telefone"); telefone.setText("123-456"); Element endereco = new Element("endereco"); endereco.setText("Av. Amaral Peixoto S/N"); Element email = new Element("email"); email.setText("glaucioguerra@gmail.com"); //Adicionando elementos nome, telefone, endereco e email no Contato contato.addContent(nome); contato.addContent(telefone); contato.addContent(endereco); contato.addContent(email); //Adicionado o Contato a Agenda agenda.addContent(contato); //Classe responsvel para imprimir / gerar o XML XMLOutputter xout = new XMLOutputter(); try { //Criando o arquivo de saida FileWriter arquivo = new FileWriter(new File("c:/arquivo.xml")); //Imprimindo o XML no arquivo xout.output(documento, arquivo); } catch (IOException e) { e.printStackTrace(); } } }
Agora que o documento j est processado, ns precisamos fazer uma iterao dos elementos a partir do root e exibi-los na tela. Abaixo segue o cdigo:
Element agenda = doc.getRootElement();
Depois de selecionar o elemento root, vamos criar uma lista com os filhos do elemento root. A partir desta lista faremos a iterao e a recuperao dos elementos. Segue o cdigo:
List<Element> lista = agenda.getChildren(); for (Element e: lista ){ System.out.println("Contato: "+ e.getAttributeValue("id")); System.out.println("Nome: " + e.getChildText("nome")); System.out.println("Telefone: " + e.getChildText("telefone")); System.out.println("Endereo: " + e.getChildText("endereco")); System.out.println("E-mail: " + e.getChildText("email")); }
public class Main { @SuppressWarnings("unchecked") public static void main(String[] args) { Document doc = null; SAXBuilder builder = new SAXBuilder(); try { doc = builder.build("c:/arquivo.xml"); } catch (Exception e) { e.printStackTrace(); } Element agenda = doc.getRootElement(); List<Element> lista = agenda.getChildren(); for (Element e: lista ){ System.out.println("Contato: "+ e.getAttributeValue("id")); System.out.println("Nome: " + e.getChildText("nome")); System.out.println("Telefone: " + e.getChildText("telefone")); System.out.println("Endereo: " + e.getChildText("endereco")); System.out.println("E-mail: " + e.getChildText("email")); } } }
Como o valor de contato um Atributo, a forma que temos para acessar este membro diferente de todas as outras. De acordo com o exemplo acima, a funo seria e.getAttributeValue() e no e.getChildText(). Outro item que deve ser observado so as excees lanadas pelo build da classe SaxBuilder. No caso exibido, foi generalizada a Exception. No entanto, existem pelo menos duas excees a serem tratadas de forma mais especifica: a IOException e a JDOMException.