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

JDOM 實現 Java 更新 XML 文件:完整代碼與圖文演示

     編輯:Java 相關知識

JDOM 是 Java 專用的 XML 文檔操作 API,提供比 DOM 更簡潔、比 SAX 更靈活的樹模型操作體驗。本文演示如何使用 JDOM 讀取、修改、輸出 XML 文件,含完整代碼與前後對比截圖說明。

依賴引入




    org.jdom
    jdom2
    2.0.6


原始 XML (sample.xml)




    
        John
        30
        IT
    
    
        Jane
        25
        HR
    

Java 修改代碼


import org.jdom2.*;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import java.io.FileOutputStream;
import java.util.List;

public class JDomUpdateDemo {
    public static void main(String[] args) throws Exception {
        // 1. 解析 XML 為 Document 物件
        SAXBuilder builder = new SAXBuilder();
        Document doc = builder.build("sample.xml");
        Element root = doc.getRootElement();

        // 2. 修改:將 id=1 的員工年齡改為 31,部門改為 R&D
        List employees = root.getChildren("employee");
        for (Element emp : employees) {
            if ("1".equals(emp.getAttributeValue("id"))) {
                emp.getChild("age").setText("31");
                emp.getChild("department").setText("R&D");
                // 新增技能元素
                Element skill = new Element("skill");
                skill.setText("Java");
                emp.addContent(skill);
                break;
            }
        }

        // 3. 新增員工
        Element newEmp = new Element("employee");
        newEmp.setAttribute("id", "3");
        newEmp.addContent(new Element("name").setText("Bob"));
        newEmp.addContent(new Element("age").setText("28"));
        newEmp.addContent(new Element("department").setText("Finance"));
        root.addContent(newEmp);

        // 4. 刪除 id=2 的員工
        Element toRemove = null;
        for (Element emp : root.getChildren("employee")) {
            if ("2".equals(emp.getAttributeValue("id"))) {
                toRemove = emp;
                break;
            }
        }
        if (toRemove != null) toRemove.detach();

        // 5. 格式化輸出回文件
        XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
        outputter.output(doc, new FileOutputStream("sample_modified.xml"));
        System.out.println("XML 更新完成");
    }
}

修改後 XML (sample_modified.xml)




    
        John
        31
        R&D
        Java
    
    
        Bob
        28
        Finance
    

關鍵 API 對照表

JDOM vs DOM vs JAXB 快速選型

操作JDOM 方法
解析文件SAXBuilder.build(File/InputStream/String)
獲取根元素doc.getRootElement()
查找子元素element.getChild(name) / getChildren(name)
獲取屬性值element.getAttributeValue(name)
修改文本element.setText(String)
新增子元素parent.addContent(Element)
新增屬性element.setAttribute(name, value)
刪除元素element.detach()
格式化輸出XMLOutputter(Format.getPrettyFormat())
場景推薦理由
簡單修改、配置文件JDOMAPI 直觀、依賴輕、無需註解
大文件、流式處理StAX/SAX低記憶體、單向流
物件⇄XML 雙向綁定JAXB註解驅動、領域模型映射
標準合規、企業級DOM (W3C)標準 API、跨語言可移植

常見坑點

  • 命名空間:getChild("name", namespace) 需顯式傳入 Namespace 物件。
  • 編碼:輸出時指定 Format.getPrettyFormat().setEncoding("UTF-8")。
  • 實體引用:JDOM 預設不展開實體,需 builder.setExpandEntities(true)。
  • 執行緒安全:Document 非線程安全,多執行緒環境下需同步或複製。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved