Écrire un org.w3.dom.Document dans un fichier

Écrire un document org.w3.dom.Document dans un fichier

1. Vue d'ensemble

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

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

Dans ce tutoriel rapide,we’ll see how to write a Document to a file both in an in-line as well as a pretty-printed format.

2. Utilisation d'un transformateur

Le poids lourd lors de l'écriture deDocuments dans des fichiers estjavax.xml.transform.Transformer.

2.1. Création du transformateur

Alors, commençons par obtenir unTransformerFactory. Nous utiliserons cette fabrique pour créer le transformateur:

TransformerFactory transformerFactory = TransformerFactory.newInstance()

La propriété systèmejavax.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 sabstractTransformerFactory . But, if we don’t define this property, the transformer will simply use a platform default.

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

Maintenant que nous avons la fabrique, créons lesTransformer:

Transformer transformer = transformerFactory.newTransformer();

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

The Transformer transforms a source into a result. Dans notre cas, la source est le document XML et le résultat est le fichier de sortie.

Commençons par spécifier la source de la transformation. Ici, nous allons utiliser nosDocument pour construire une source DOM:

DOMSource source = new DOMSource(document);

Note that the source doesn’t have to be the whole document. Tant que le XML est bien formé, nous pouvons utiliser une sous-arborescence du document.

Ensuite, nous allons spécifier 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. But, we can use any kind of java.io.Writer or java.io.OutputStream to create the*StreamResult.* Par exemple, nous pourrions utiliser unStringWriter t pour construire unString qui peut ensuite être enregistré.

2.3. Création du fichier XML

Enfin, nous indiquerons au transformateur d'opérer sur l'objet source et de générer une sortie vers l'objet de résultat:

transformer.transform(source, result);

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


  

3. Personnaliser la sortie

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

3.1. Jolie impression de la sortie

Désormais, 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("{http://xml.apache.org/xslt}indent-amount", "4");

Notez qu'avec lesOutputKeys.INDENT, nous avons également spécifié la propriétéindent-amount ici. Cela indente la sortie correctement, car par défaut l'indentation est égale à 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 vouloir 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, en plus d'imprimer joliment et d'omettre la déclaration XML, nous pouvons personnaliser la sortie de différentes manières:

  • Nous pouvons spécifier la version XML en utilisantOutputKeys.VERSION, , la valeur par défaut est "1.0"

  • Nous pouvons indiquer notre encodage de caractères préféré en utilisantOutputKeys.ENCODING, la valeur par défaut est «utf-8»

  • Et nous pouvons également spécifier d'autres attributs de déclaration typiques tels queSYSTEMPUBLIC, and STANDALONE.

4. Conclusion

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

Et, bien sûr, le code source associé est disponibleover on GitHub.