Konvertieren Sie Java org.w3c.dom.Document-Objekte und XML-Zeichenfolgen

Beispielcode

Speichern Sie den folgenden Beispielcode unter dem Dateinamen 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;

/**
 *Beispielcode zum Konvertieren von XML-Zeichenfolgen in Dokumentobjekte(Die Zeichenkodierung ist UTF-8 behoben)。
 */
public class MyApp {

  /**
   *Konvertiert eine XML-Zeichenfolge in ein Dokumentobjekt.
   * @param xml XML-Zeichenfolge
   * @Dokumentobjekt zurückgeben
   * @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);
    }
  }

  /**
   *Konvertiert ein Dokumentobjekt in eine XML-Zeichenfolge.
   * @param doc Dokumentobjekt
   * @XML-Zeichenfolge zurückgeben
   * @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();
      //Die Standardeinstellung ist UTF, auch wenn nichts angegeben ist-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);
    }
  }

  //Funktionsprüfungsmethode
  public static void main(String[] args) throws IOException, SAXException, ParserConfigurationException, TransformerException, XPathExpressionException {

    //Bereiten Sie die XML-Zeichenfolge für die Funktionsprüfung vor
    //Verwenden Sie Zeichenfolgenliterale mit der in Java 15 verfügbaren Textblockfunktion
    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>Hallo Weltfeed</title>
        <updated>2000-08-06T00:00:00+09:00</updated>
        <entry>
          <id>helloworldfeed:helloworld1</id>
          <title>Hallo Welt Hallo Welt</title>
          <content>Hallo Welt Hallo Welt</content>
          <updated>2000-08-06T00:00:00+09:00</updated>
        </entry>
      </feed>
      """;

    //XML-Zeichenfolge in Dokumentobjekt konvertieren
    System.out.println("*****XML-Zeichenfolge in Dokumentobjekt konvertieren*****");
    Document doc = toDocument(xml);
    System.out.println("Titel: " + XPathFactory.newInstance().newXPath().evaluate("//title", doc, XPathConstants.STRING));
    System.out.println();

    //Dokumentobjekt in XML-Zeichenfolge konvertieren
    System.out.println("*****Dokumentobjekt in XML-Zeichenfolge konvertieren*****");
    doc.setXmlStandalone(true);
    String outputXml = toString(doc);
    System.out.println(outputXml);
    System.out.println();
  }
}

Beispielausführungsergebnis

Ausführungsumgebung: Java 15 (Oracle JDK) + macOS Catalina

$ java MyApp.java
*****XML-Zeichenfolge in Dokumentobjekt konvertieren*****
Titel:Hallo Weltfeed

*****Dokumentobjekt in XML-Zeichenfolge konvertieren*****
<?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>Hallo Weltfeed</title>
  <updated>2000-08-06T00:00:00+09:00</updated>
  <entry>
    <id>helloworldfeed:helloworld1</id>
    <title>Hallo Welt Hallo Welt</title>
    <content>Hallo Welt Hallo Welt</content>
    <updated>2000-08-06T00:00:00+09:00</updated>
  </entry>
</feed>

Referenzmaterial

Recommended Posts

Konvertieren Sie Java org.w3c.dom.Document-Objekte und XML-Zeichenfolgen
[Java] Konvertieren Sie Zeichenfolgen in Groß- / Kleinschreibung (AOJ⑨ - Swap in Groß- / Kleinschreibung)
Java-Strings bearbeiten
Java und JavaScript
XXE und Java
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
<java> Zip-Datei lesen und direkt in String konvertieren
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
[Java] Sortiertipps beim Mischen von Zeichenfolgen und Zahlen
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Subtrahieren Sie Enum-Konstanten von Zeichenfolgen und Werten in Java zurück
[Java] [XML-Signatur] Fügen Sie dem Signatur-Tag Präfix und ID hinzu
[Java] Konvertieren Sie JSON in Java und Java in JSON-How to use GSON and Jackson-
Konvertieren Sie mit Moshi zwischen Java-Objekten und JSON
[Java] Umgang mit Zeichenketten (String-Klasse und StringBuilder-Klasse)
[Java] PDF-Version konvertieren
Getter und Setter (Java)
Java-Klasse, Instanz, Objekt
[Java] Thread und ausführbar
Java wahr und falsch
[Java] Vergleich von Zeichenketten und && und ||
Formatieren Sie XML in Java
veränderliche und unveränderliche Objekte
Java - Serialisierung und Deserialisierung
[Java] Argumente und Parameter
timedatectl und Java TimeZone
[Java] Verzweigen und Wiederholen
[Java] Variablen- und Typtypen
Java (Klasse und Instanz)
[Java] Überladen und überschreiben
[Java] Vergleichsmethode für Zeichenketten und Vergleichsmethode mit regulären Ausdrücken
Ruft Attribute und Werte aus einer XML-Datei in Java ab
Unterschiede im Umgang mit Zeichenfolgen zwischen Java und Perl