Ecrire un org.w3.dom.Document dans un fichier

1. Vue d'ensemble

Une partie importante de la gestion XML consiste à créer des fichiers XML qui peuvent être utilisés par d'autres.

Lors de la gestion de XML en Java, nous aurons souvent une instance de org.w3c.dom.Document que nous devons exporter.

Dans ce tutoriel rapide, nous verrons comment écrire un document dans un fichier à la fois dans un format en ligne et dans un joli format imprimé .

2. Utilisation d'un transformateur

Javax.xml.transform.Transformer est le plus important lors de l'écriture de documents dans des fichiers .

2.1. Création du transformateur

Alors, commençons par obtenir une TransformerFactory . Nous allons utiliser cette usine pour créer le transformateur:

TransformerFactory transformerFactory = TransformerFactory.newInstance()

La propriété système javax.xml.transform.TransformerFactory spécifie l'implémentation d'usine à créer. Par conséquent, cette propriété nomme une sous-classe concrète de la classe abstraite TransformerFactory . Mais, si nous ne définissons pas cette propriété, le transformateur utilisera simplement une plate-forme par défaut.

Notez que depuis Java 9, nous pouvons utiliser TransformerFactory. newDefaultInstance () pour créer l'implémentation système par défaut intégrée.

Maintenant que nous avons l'usine, créons le Transformer :

Transformer transformer = transformerFactory.newTransformer();

2.2. Spécification de la source et du résultat

Le Transformer transforme une source en résultat. Dans notre cas, la source est le document XML et le résultat est le fichier de sortie.

Tout d'abord, spécifions la source de la transformation. Ici, nous allons utiliser notre document pour construire une source DOM:

DOMSource source = new DOMSource(document);

Notez que la source ne doit pas nécessairement être le document entier. Tant que le XML est bien formé, nous pouvons utiliser une sous-arborescence du document.

Ensuite, nous spécifierons où le transformateur doit écrire le résultat de la transformation:

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

Ici, nous disons au transformateur que le résultat est un flux de fichier. Mais, nous pouvons utiliser n'importe quel type de java.io.Writer ou java.io.OutputStream pour créer le StreamResult. Par exemple, nous pourrions utiliser un StringWriter pour construire une String qui peut ensuite être journalisée.

2.3. Création du fichier XML

Enfin, nous dirons au transformateur d'opérer sur l'objet source et de sortir vers l'objet résultat:

transformer.transform(source, result);

Cela créera enfin un fichier avec le contenu du document XML:

3. Personnalisation de la sortie

Nous pouvons personnaliser le XML écrit dans le fichier en spécifiant une variété de propriétés de sortie . Explorons-en quelques-uns.

3.1. Jolie impression de la sortie

Maintenant, notre transformateur par défaut a simplement tout écrit sur une seule ligne, ce qui n'est pas aussi agréable à lire. En effet, il serait encore plus difficile à lire si le XML était volumineux.

Nous pouvons configurer notre transformateur pour une jolie impression en définissant la propriété OutputKeys.INDENT sur le transformateur:

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

Notez qu'avec OutputKeys.INDENT , nous avons également spécifié la propriété indent -amount ici. Cela indentera correctement la sortie, car par défaut, l'indentation est de zéro espace.

Avec les propriétés ci-dessus définies, nous obtenons une sortie beaucoup plus agréable:

3.2. Omettre la déclaration XML

Parfois, nous pouvons souhaiter exclure la déclaration XML.

Nous pouvons configurer notre transformateur pour ce faire en définissant la propriété OutputKeys.OMIT_XML_DECLARATION :

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

Et en utilisant à nouveau notre transformateur, nous obtenons:

3.3. Autres propriétés de sortie

Ainsi, mis à part la jolie impression et l'omission de la déclaration XML, nous pouvons également personnaliser la sortie de différentes manières:

  • Nous pouvons spécifier la version XML en utilisant OutputKeys.VERSION, la valeur par défaut est «1.0»
  • Nous pouvons indiquer notre encodage de caractères préféré en utilisant OutputKeys.ENCODING , la valeur par défaut est «utf-8»
  • Et, nous pouvons également spécifier d'autres attributs de déclaration typiques comme SYSTEM , PUBLIC et STANDALONE .

4. Conclusion

Dans ce tutoriel, nous avons vu comment exporter un org.w3c.Document vers un fichier et comment personnaliser la sortie.

Et, bien sûr, le code source qui l'accompagne est disponible à l'adresse over sur GitHub.