Java 寫入 XML

Sheeraz Gul 2023年10月12日
Java 寫入 XML

Java 內建的文件物件模型 API 用於在 Java 中建立和寫入 XML 檔案。本教程演示如何將 XML 寫入 Java 中的控制檯和檔案。

Java 寫入 XML

如上所述,DOM API 用於將 XML 寫入 Java 中的檔案。這是一個用 Java 將 XML 寫入檔案的簡單示例。

package Delfstack;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class Write_XML {
  public static void main(String[] args) throws ParserConfigurationException, TransformerException {
    DocumentBuilderFactory Doc_Build_Factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder Document_Builder = Doc_Build_Factory.newDocumentBuilder();

    // the root elements for DOM Document
    // create XML fields, elements, etc.
    Document document = Document_Builder.newDocument();
    Element Root_Element = document.createElement("School");
    document.appendChild(Root_Element);
    document.createElement("Teacher");
    Root_Element.appendChild(document.createElement("Teacher"));
    document.createElement("Student");
    Root_Element.appendChild(document.createElement("Student"));

    // write DOM document in a file
    try (FileOutputStream output_file = new FileOutputStream("school.xml")) {
      Write_Xml(document, output_file);
      System.out.println("The XML has been successfully written to school.xml");
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  // Method to generate XML. Writing output stream
  private static void Write_Xml(Document document, OutputStream output_file)
      throws TransformerException {
    TransformerFactory Transformer_Factory = TransformerFactory.newInstance();
    Transformer New_Transformer = Transformer_Factory.newTransformer();
    DOMSource Source_XML = new DOMSource(document);
    StreamResult Result_XML = new StreamResult(output_file);

    New_Transformer.transform(Source_XML, Result_XML);
  }
}

上面的程式碼將建立一個檔案並向其寫入 XML 語法。見輸出:

The XML has been successfully written to school.xml

寫入 XML

讓我們嘗試另一個包含更多欄位的示例,該示例將 XML 寫入檔案和控制檯。參見示例:

package Delfstack;

import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Write_XML {
  public static void main(String[] args) {
    DocumentBuilderFactory Doc_Builder_Factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder Document_Builder;
    try {
      Document_Builder = Doc_Builder_Factory.newDocumentBuilder();
      Document document = Document_Builder.newDocument();
      // adding elements to Document
      Element Root_Element = document.createElementNS("https://www.delftstack.com/", "Tutorials");
      document.appendChild(Root_Element);

      // add a first child element to the root element
      Root_Element.appendChild(Get_Tutorial(document, "1",
          "Perform String to String Array Conversion in Java",
          "https://www.delftstack.com/howto/java/how-to-perform-string-to-string-array-conversion-in-java/",
          "Java", "May-21, 2020"));

      // add a second child
      Root_Element.appendChild(Get_Tutorial(document, "2", "Compile a C++ Program Using GCC",
          "https://www.delftstack.com/howto/cpp/gcc-compile-cpp/", "C++", "March-25, 2022"));
      // add third child
      Root_Element.appendChild(Get_Tutorial(document, "3", "Python Tutorial - Introduction",
          "https://www.delftstack.com/tutorial/python-3-basic-tutorial/python-introduction/",
          "Python", "January-29, 2018"));

      // create output
      TransformerFactory Transformer_Factory = TransformerFactory.newInstance();
      Transformer transformer = Transformer_Factory.newTransformer();
      // open indent for the xml code
      transformer.setOutputProperty(OutputKeys.INDENT, "yes");
      DOMSource Dom_Source = new DOMSource(document);

      // write to file and console both
      StreamResult XML_file = new StreamResult(new File("delftstack.xml"));
      StreamResult XML_console = new StreamResult(System.out);
      // write data
      transformer.transform(Dom_Source, XML_file);
      transformer.transform(Dom_Source, XML_console);

      System.out.println("The XML Has been written to the file and console");

    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private static Node Get_Tutorial(Document document, String id, String article_name, String link,
      String programming_language, String date_created) {
    Element tutorial = document.createElement("Tutorial");

    // set the tutorial id attribute
    tutorial.setAttribute("Id", id);

    // create article name element
    tutorial.appendChild(Get_Tutorial_Elements(document, tutorial, "ArticleName", article_name));

    // create the Link element
    tutorial.appendChild(Get_Tutorial_Elements(document, tutorial, "Link", link));

    // create the Programming Language element
    tutorial.appendChild(
        Get_Tutorial_Elements(document, tutorial, "ProgrammingLanguage", programming_language));

    // create Date Created element
    tutorial.appendChild(Get_Tutorial_Elements(document, tutorial, "DateCreated", date_created));

    return tutorial;
  }

  // method to create text node
  private static Node Get_Tutorial_Elements(
      Document document, Element element, String element_name, String element_value) {
    Element element_node = document.createElement(element_name);
    element_node.appendChild(document.createTextNode(element_value));
    return element_node;
  }
}

上面的程式碼將為 delftstack.com 的教程建立一個 XML 檔案。每個教程包含四個欄位,ArticleNameLinkProgrammingLanguageDateCreated

該程式碼將建立 XML 檔案並將 XML 寫入控制檯。檢視輸出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Tutorials xmlns="https://www.delftstack.com/">
    <Tutorial Id="1">
        <ArticleName>Perform String to String Array Conversion in Java</ArticleName>
        <Link>https://www.delftstack.com/howto/java/how-to-perform-string-to-string-array-conversion-in-java/</Link>
        <ProgrammingLanguage>Java</ProgrammingLanguage>
        <DateCreated>May-21, 2020</DateCreated>
    </Tutorial>
    <Tutorial Id="2">
        <ArticleName>Compile a C++ Program Using GCC</ArticleName>
        <Link>https://www.delftstack.com/howto/cpp/gcc-compile-cpp/</Link>
        <ProgrammingLanguage>C++</ProgrammingLanguage>
        <DateCreated>March-25, 2022</DateCreated>
    </Tutorial>
    <Tutorial Id="3">
        <ArticleName>Python Tutorial - Introduction</ArticleName>
        <Link>https://www.delftstack.com/tutorial/python-3-basic-tutorial/python-introduction/</Link>
        <ProgrammingLanguage>Python</ProgrammingLanguage>
        <DateCreated>January-29, 2018</DateCreated>
    </Tutorial>
</Tutorials>
The XML Has been written to the file and console

寫入 XML 1

作者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相關文章 - Java XML