Convertir des objets Java org.w3c.dom.Document et des chaînes XML

Exemple de code

Enregistrez l'exemple de code suivant avec le nom de fichier MyApp.java.

import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;

/**
 *Exemple de code pour la conversion de chaînes XML en objets Document(Le codage des caractères est UTF-8 fixe)。
 */
public class MyApp {

  /**
   *Convertit une chaîne XML en objet Document.
   * @chaîne XML param xml
   * @renvoyer l'objet Document
   * @throws ParserConfigurationException
   * @throws SAXException
   * @throws IOException
   */
  public static Document toDocument(String xml) throws ParserConfigurationException, SAXException, IOException {
    try (StringReader reader = new StringReader(xml)) {
      InputSource source = new InputSource(reader);
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      return builder.parse(source);
    }
  }

  /**
   *Convertit un objet Document en une chaîne XML.
   * @param doc Objet Document
   * @retourner la chaîne XML
   * @throws IOException
   * @throws TransformerException
   */
  public static String toString(Document doc) throws IOException, TransformerException {
    try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
      TransformerFactory factory = TransformerFactory.newInstance();
      Transformer transformer = factory.newTransformer();
      //La valeur par défaut est UTF même si non spécifié-8
      transformer.setOutputProperty(OutputKeys.ENCODING, StandardCharsets.UTF_8.name());
      DOMSource source = new DOMSource(doc);
      StreamResult result = new StreamResult(output);
      transformer.transform(source, result);
      return output.toString(StandardCharsets.UTF_8);
    }
  }

  //Méthode de vérification du fonctionnement
  public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException, TransformerException, XPathExpressionException {

    //Préparer la chaîne de caractères XML pour la vérification des opérations
    //Utiliser des littéraux de chaîne avec la fonctionnalité Text Blocks disponible à partir de Java 15
    String xml = """
      <?xml version="1.0" encoding="UTF-8"?>
      <feed xml:lang="ja-JP" xmlns="http://www.w3.org/2005/Atom">
        <id>helloworldfeed</id>
        <author>niwasawa</author>
        <title>Bonjour le monde</title>
        <updated>2000-08-06T00:00:00+09:00</updated>
        <entry>
          <id>helloworldfeed:helloworld1</id>
          <title>Hello World Hello World</title>
          <content>Hello World Hello World</content>
          <updated>2000-08-06T00:00:00+09:00</updated>
        </entry>
      </feed>
      """;

    //Convertir une chaîne XML en objet Document
    System.out.println("*****Convertir une chaîne XML en objet Document*****");
    Document doc = toDocument(xml);
    System.out.println("Titre: " + XPathFactory.newInstance().newXPath().evaluate("//title", doc, XPathConstants.STRING));
    System.out.println();

    //Convertir l'objet Document en chaîne XML
    System.out.println("*****Convertir l'objet Document en chaîne XML*****");
    doc.setXmlStandalone(true);
    String outputXml = toString(doc);
    System.out.println(outputXml);
    System.out.println();
  }
}

Exemple de résultat d'exécution

Environnement d'exécution: Java 15 (Oracle JDK) + macOS Catalina

$ java MyApp.java
*****Convertir une chaîne XML en objet Document*****
Titre:Bonjour le monde

*****Convertir l'objet Document en chaîne XML*****
<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja-JP">
  <id>helloworldfeed</id>
  <author>niwasawa</author>
  <title>Bonjour le monde</title>
  <updated>2000-08-06T00:00:00+09:00</updated>
  <entry>
    <id>helloworldfeed:helloworld1</id>
    <title>Hello World Hello World</title>
    <content>Hello World Hello World</content>
    <updated>2000-08-06T00:00:00+09:00</updated>
  </entry>
</feed>

Matériel de référence

Recommended Posts

Convertir des objets Java org.w3c.dom.Document et des chaînes XML
[Java] Convertit les chaînes de caractères en majuscules / minuscules (AOJ⑨ --swap majuscules / minuscules)
Manipulation des chaînes Java
Java et JavaScript
XXE et Java
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
<java> Lire le fichier Zip et le convertir directement en chaîne
Convertir l'énumération Java et JSON vers et depuis Jackson
[Java] Conseils de tri lorsque les chaînes et les nombres sont mélangés
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Soustraire les constantes Enum des chaînes et des valeurs en Java
[Java] [Signature XML] Ajouter un préfixe et un ID à la balise Signature
[Java] Convertir JSON en Java et Java en JSON-Comment utiliser GSON et Jackson-
Conversion entre objets Java et JSON à l'aide de Moshi
[Java] Gestion des chaînes de caractères (classe String et classe StringBuilder)
[Java] Convertir la version PDF
Getter et Setter (Java)
classe java, instance, objet
[Java] Thread et exécutable
Java vrai et faux
[Java] Comparaison des chaînes de caractères et && et ||
Formater XML en Java
objets mutables et immuables
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
timedatectl et Java TimeZone
[Java] Branchement et répétition
[Java] Types de variables et types
java (classe et instance)
[Java] Surcharge et remplacement
[Java] Méthode de comparaison de chaînes de caractères et méthode de comparaison utilisant des expressions régulières
Obtenir des attributs et des valeurs à partir d'un fichier XML en Java
Différences dans la gestion des chaînes entre Java et Perl