Escreva um org.w3.dom.Document em um arquivo

Escreva um org.w3.dom.Document em um arquivo

1. Visão geral

Uma parte importante do tratamento de XML é a criação de arquivos XML que podem ser consumidos por outras pessoas.

Ao lidar com XML em Java, muitas vezes teremos uma instância deorg.w3c.dom.Document t que precisamos exportar.

Neste tutorial rápido,we’ll see how to write a Document to a file both in an in-line as well as a pretty-printed format.

2. Usando um transformador

O peso pesado ao gravarDocuments em arquivos éjavax.xml.transform.Transformer.

2.1. Criando o Transformer

Então, vamos começar obtendo umTransformerFactory. Usaremos esta fábrica para criar o transformador:

TransformerFactory transformerFactory = TransformerFactory.newInstance()

A propriedade do sistemajavax.xml.transform.TransformerFactory especifica qual implementação de fábrica deve ser criada. Conseqüentemente, essa propriedade nomeia uma subclasse concreta da classeTransformerFactory abstract. But, if we don’t define this property, the transformer will simply use a platform default.

Observe que, desde o Java 9, podemos usarTransformerFactory.newDefaultInstance() para criar a implementação padrão do sistema integrada.

Agora que temos a fábrica, vamos criar oTransformer:

Transformer transformer = transformerFactory.newTransformer();

2.2. Especificando a fonte e o resultado

The Transformer transforms a source into a result. Em nosso caso, a fonte é o documento XML e o resultado é o arquivo de saída.

Primeiro, vamos especificar a fonte da transformação. Aqui, usaremos nossoDocument para construir uma fonte DOM:

DOMSource source = new DOMSource(document);

Note that the source doesn’t have to be the whole document. Contanto que o XML seja bem formado, podemos usar uma subárvore do documento.

A seguir, especificaremos onde o transformador deve gravar o resultado da transformação:

FileWriter writer = new FileWriter(new File(fileName));
StreamResult result = new StreamResult(writer);

Aqui, estamos dizendo ao transformador que o resultado é um fluxo de arquivo. But, we can use any kind of java.io.Writer or java.io.OutputStream to create the*StreamResult.* Por exemplo, poderíamos usar umStringWriter to construir umString que pode então ser registrado.

2.3. Criação do arquivo XML

Por fim, diremos ao transformador para operar no objeto de origem e dar saída ao objeto de resultado:

transformer.transform(source, result);

Isso finalmente criará um arquivo com o conteúdo do documento XML:


  

3. Personalizando a saída

Podemos personalizar o XML gravado no arquivo especificando uma variedade de propriedades de saídaVamos explorar algumas delas.

3.1. Impressão bonita do resultado

Agora, nosso transformador padrão simplesmente escreveu tudo em uma única linha, o que não é tão agradável de ler. De fato, seria ainda mais difícil ler se o XML fosse grande.

Podemos configurar nosso transformador para impressão bonita definindo a propriedadeOutputKeys.INDENT no transformador:

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

Observe que, juntamente comOutputKeys.INDENT, também especificamos a propriedadeindent-amount aqui. Isso irá indentar a saída corretamente, pois por padrão a indentação é zero espaços.

Com o conjunto de propriedades acima, obtemos uma saída muito melhor:



    
        
        
    

3.2. Omitindo a Declaração XML

Às vezes, podemos querer excluir a declaração XML.

Podemos configurar nosso transformador para fazer isso definindo aOutputKeys.OMIT_XML_DECLARATION property:

transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");

E usando nosso transformador novamente, obtemos:


    
        
        
    

3.3. Outras propriedades de saída

Portanto, além de imprimir e omitir a declaração XML, também podemos personalizar a saída de outras maneiras:

  • Podemos especificar a versão XML usandoOutputKeys.VERSION, e o padrão é “1.0”

  • Podemos indicar nossa codificação de caracteres preferida usandoOutputKeys.ENCODING, o padrão é “utf-8”

  • E, também podemos especificar outros atributos de declaração típicos comoSYSTEMPUBLIC, and STANDALONE.

4. Conclusão

Neste tutorial, vimos como exportar umorg.w3c.Document de um arquivo e como personalizar a saída.

E, claro, o código-fonte que o acompanha está disponívelover on GitHub.