首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

DOM4J 寫入 XML 完整實戰:創建文檔、生成元素、屬性與格式化輸出

     編輯:Java 綜合教學

DOM4J 寫入 XML 完整實戰:創建文檔、生成元素、屬性與格式化輸出

DOM4J 是 Java 操作 XML 的經典庫,API 直觀、支持 XPath、性能優異。本文通過完整示例演示如何從零構建 XML 文檔並寫入文件,涵蓋元素創建、屬性設置、文本內容、格式化輸出等核心操作。

Maven 依賴

<dependency>
    <groupId>org.dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>2.1.3</version> <!-- 或 1.6.1 舊版本 -->
</dependency>

完整代碼示例

import java.io.File;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class DOM4JWriteDemo {
    public static void main(String[] args) {
        // 1. 創建文檔對象
        Document document = DocumentHelper.createDocument();
        
        // 2. 創建根元素
        Element bookStore = document.addElement("bookstore");
        
        // 3. 創建子元素並設置屬性
        Element book = bookStore.addElement("book");
        book.addAttribute("id", "001");  // 屬性
        
        // 4. 添加子元素與文本內容
        Element name = book.addElement("name");
        name.addText("明朝那些事");      // 文本節點
        
        Element price = book.addElement("price");
        price.setText("100元");          // 等同 addText
        
        Element type = book.addElement("type");
        type.setText("歷史");
        
        Element author = book.addElement("author");
        author.setText("安格");
        
        // 5. 格式化輸出設置(縮進、換行、編碼)
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");     // 關鍵:防止中文亂碼
        
        // 6. 寫入文件
        try (FileOutputStream fos = new FileOutputStream(new File("books.xml"));
             XMLWriter writer = new XMLWriter(fos, format)) {
            writer.write(document);
            System.out.println("XML 生成成功:books.xml");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

生成的 books.xml 內容

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book id="001">
    <name>明朝那些事</name>
    <price>100元</price>
    <type>歷史</type>
    <author>安格</author>
  </book>
</bookstore>

核心 API 速查

任務方法說明
創建文檔DocumentHelper.createDocument()工廠方法
添加根元素doc.addElement("root")返回 Element
添加子元素parent.addElement("child")鏈式調用
設置屬性element.addAttribute("key", "val")
設置文本element.setText("text") / addText()setText 會清空原有內容
格式化輸出OutputFormat.createPrettyPrint()自動縮進換行
指定編碼format.setEncoding("UTF-8")必須設置,否則中文亂碼
寫入流new XMLWriter(outputStream, format)實現 AutoCloseable

常見坑點與最佳實踐

  1. 編碼問題:務必調用 format.setEncoding("UTF-8"),否則中文會變成亂碼或實體引用。
  2. 資源關閉:使用 try-with-resources 自動關閉 XMLWriter 與輸出流,防止文件鎖定或內容未刷新。
  3. 特殊字符轉義:DOM4J 會自動將 < > & 轉義為實體,無需手動處理。
  4. 大文件寫入:若 XML 超大(百 MB 級),建議使用 XMLWriter 的流式寫入模式或 StAX,避免 DOM 佔用過多內存。
  5. 命名空間:涉及命名空間時,用 DocumentHelper.createDocument(QName) 與 element.addElement(QName)。

進階:直接輸出到字符串

import java.io.StringWriter;
// ...
StringWriter sw = new StringWriter();
XMLWriter writer = new XMLWriter(sw, format);
writer.write(document);
String xmlString = sw.toString();
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved