📜  DOM解析器-创建XML文档(1)

📅  最后修改于: 2023-12-03 15:14:47.264000             🧑  作者: Mango

DOM解析器-创建XML文档

简介

DOM(Document Object Model)解析器是一种处理XML文档的方法。它可以将XML文档转换为一个由节点和对象组成的树形结构。

与SAX解析器不同,DOM解析器会将整个XML文档一次性读入到内存中,并在内存中构建一个树形结构。这使得DOM解析器能够进行正反两种方向的访问。

DOM解析器比SAX解析器更适合处理小型XML文档,因为DOM解析器需要在内存中保存整个文档的节点和对象。对于非常大的XML文档,使用DOM解析器可能会因内存不足而导致程序崩溃。

创建XML文档

使用DOM解析器创建XML文档可以通过以下步骤实现:

  1. 创建DocumentBuilderFactory对象
  2. 使用DocumentBuilderFactory对象创建DocumentBuilder对象
  3. 使用DocumentBuilder对象创建Document对象
  4. 创建元素节点和属性节点
  5. 将元素节点和属性节点添加到Document对象中
  6. 将Document对象写入XML文件
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

public class CreateXML {

    public static void main(String[] args) {

        try {
            // Step 1: Create a DocumentBuilderFactory
            DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();

            // Step 2: Create a DocumentBuilder from the DocumentBuilderFactory
            DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

            // Step 3: Create a Document object using the DocumentBuilder
            Document document = documentBuilder.newDocument();

            // Step 4: Create elements and attributes
            Element root = document.createElement("students");
            Element student = document.createElement("student");
            student.setAttribute("id", "1");

            Element name = document.createElement("name");
            name.appendChild(document.createTextNode("Alice"));

            Element age = document.createElement("age");
            age.appendChild(document.createTextNode("20"));

            // Step 5: Add elements and attributes to the Document object
            student.appendChild(name);
            student.appendChild(age);
            root.appendChild(student);
            document.appendChild(root);

            // Step 6: Write the Document object to an XML file
            javax.xml.transform.TransformerFactory tf = javax.xml.transform.TransformerFactory.newInstance();
            javax.xml.transform.Transformer transformer = tf.newTransformer();
            transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "UTF-8");
            transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");
            java.io.StringWriter sw = new java.io.StringWriter();
            javax.xml.transform.dom.DOMSource source = new javax.xml.transform.dom.DOMSource(document);
            javax.xml.transform.stream.StreamResult result = new javax.xml.transform.stream.StreamResult(sw);
            transformer.transform(source, result);
            String xmlString = sw.toString();
            System.out.println(xmlString);

        } catch (ParserConfigurationException pce) {
            pce.printStackTrace();
        } catch (javax.xml.transform.TransformerException tfe) {
            tfe.printStackTrace();
        }
    }
}
Conclusion

DOM解析器可以让程序员创建和处理XML文档,它允许我们使用XML来存储和传输信息。在创建XML文档时,我们可以使用Java API提供的标准DOM解析器来实现。