Criando arquivos XML no Java via DOM
29 Out 2013A manipulação de um arquivo XML através da API DOM no Java é dada através da utilização de classes nos pacotes javax.xml.parsers e org.w3c.dom.
Mas antes, vamos entender um pouco a estrutura:
- Document: É o principal nó, onde todos os outros nós serão atrelados a este.
- Element: É uma "tag" do XML, podendo ter qualquer nome, qualquer conteúdo (dentro dos limites do XML) e inclusive atributos.
- Text: É o conteúdo de um Element, podendo ser texto, número, etc.
Criando arquivos
Vamos definir um objetivo, gerar um arquivo XML assim:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<empresas>
<empresa>
<nome>Nome da empresa</nome>
<ramo>Nenhum</ramo>
</empresa>
</empresas>
Beleza, agora vamos ao Java.
O Document
Para criarmos um documento XMl, precisamos utilizar a classe Document, onde é gerada pelo DocumentBuilder que por sua vez é gerada pelo DocumentBuilderFactory. Vejamos:
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
O Element
Através da classe Document, instanciada no objeto doc, é possível criar objetos da classe Element através do método createElement:
Element root = doc.createElement("empresas");
doc.appendChild(root);
Este objeto root pode receber outros objetos do tipo Element, ou seja, podemos criar qualquer nó dentro de outro nó indefinidamente. Como é o caso para criarmos as tags nome e ramo:
Element nome = doc.createElement("nome");
empresa.appendChild(nome);
O Text
Mas e o conteúdo? Atualmente, o nosso XML só tem tags. Mas você se lembra da estrutura? Do tipo Text? O nosso Document também pode criá-lo:
Text textoNome = doc.createTextNode("Nome da empresa");
nome.appendChild(textoNome);
O elemento completo
Para visualizarmos melhor a criação no elemento empresa, veja o código a seguir:
Element nome = doc.createElement("nome");
Text textoNome = doc.createTextNode("Nome da empresa");
nome.appendChild(textoNome);
empresa.appendChild(nome);
Seguindo exatamente a mesma idéia, podemos criar o elemento ramo:
Element ramo = doc.createElement("ramo");
Text textoRamo = doc.createTextNode("Nenhum");
ramo.appendChild(textoRamo);
empresa.appendChild(ramo);
E finalmente adicionamos nosso elemento empresa ao nó principal:
root.appendChild(empresa);
Exibindo o arquivo
Devemos utilizar a classe Transformer para transformar o nosso Document em um arquivo, mas por enquanto vamos apenas exibi-lo no console:
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(System.out));
Note que onde criamos o StreamResult, é passado como parâmetro o valor System.out, onde no caso é o console, mas pode ser passado um File, que representará o arquivo propriamente dito.
Lembre-se de capturar as excessões ParserConfigurationException, TransformerConfigurationException e TransformerException! Então temos o código completo:
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("empresas");
doc.appendChild(root);
Element empresa = doc.createElement("empresa");
Element nome = doc.createElement("nome");
Text textoNome = doc.createTextNode("Nome da empresa");
nome.appendChild(textoNome);
empresa.appendChild(nome);
Element ramo = doc.createElement("ramo");
Text textoRamo = doc.createTextNode("Nenhum");
ramo.appendChild(textoRamo);
empresa.appendChild(ramo);
root.appendChild(empresa);
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
transformer.transform(new DOMSource(doc), new StreamResult(System.out));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
Após executar o programa, você verá o arquivo XML no console. Por enquanto abordei apenas a criação do XML, em outro post, irei abordar a leitura do mesmo arquivo.
Até mais.