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

Dom4j 實戰:XML 文件的建立、解析與更新完整指南

     編輯:Java 綜合教學

Dom4j 核心類介紹

  • DocumentHelper:建立 Document 物件
  • Element:代表 XML 元素,支援屬性、子元素操作
  • SAXReader:基於 SAX 解析器,高效讀取 XML
  • XMLWriter:將 Document 寫入檔案,支援格式化輸出

一、建立並寫入 XML

public static void writeXML(String filename) {
    try {
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("PortConfig");

        // 新增多個 Port 元素及屬性
        addPort(root, "portBloodpress", "COM12");
        addPort(root, "portWah", "COM14");
        addPort(root, "portBloodsugar", "COM16");
        addPort(root, "portBloodfat", "COM18");
        addPort(root, "portUric", "COM20");

        OutputFormat format = new OutputFormat(" ", true); // 縮排格式化
        XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)), format);
        writer.write(document);
        writer.close();
    } catch (Exception e) { e.printStackTrace(); }
}

private static void addPort(Element root, String name, String number) {
    Element port = root.addElement("Port");
    port.addAttribute("Portname", name);
    port.addAttribute("Portnumber", number);
}

二、讀取並解析 XML

public static void readXML(String filename) {
    try {
        SAXReader reader = new SAXReader();
        Document document = reader.read(filename);
        Element root = document.getRootElement();

        for (Iterator it = root.elementIterator(); it.hasNext();) {
            Element port = it.next();
            String name = port.attributeValue("Portname");
            String value = port.attributeValue("Portnumber");
            // 根據名稱賦值給常數類(示例)
            switch (name) {
                case "portBloodpress": Constant.portBloodpress = value; break;
                case "portWah": Constant.portWah = value; break;
                case "portBloodsugar": Constant.portBloodsugar = value; break;
                case "portBloodfat": Constant.portBloodfat = value; break;
                case "portUric": Constant.portUric = value; break;
            }
        }
    } catch (Exception e) { e.printStackTrace(); }
}

三、更新 XML

public static void updateXML(String filename) {
    try {
        File file = new File(filename);
        SAXReader reader = new SAXReader();
        Document document = reader.read(file);
        Element root = document.getRootElement();

        for (Iterator it = root.elementIterator(); it.hasNext();) {
            Element port = it.next();
            String name = port.attributeValue("Portname");
            switch (name) {
                case "portBloodpress": port.setAttributeValue("Portnumber", Constant.portBloodpress); break;
                case "portWah": port.setAttributeValue("Portnumber", Constant.portWah); break;
                case "portBloodsugar": port.setAttributeValue("Portnumber", Constant.portBloodsugar); break;
                case "portBloodfat": port.setAttributeValue("Portnumber", Constant.portBloodfat); break;
                case "portUric": port.setAttributeValue("Portnumber", Constant.portUric); break;
            }
        }

        XMLWriter writer = new XMLWriter(new FileWriter(file));
        writer.write(document);
        writer.close();
    } catch (Exception e) { e.printStackTrace(); }
}

範例 XML 內容

<?xml version="1.0" encoding="UTF-8"?>
<PortConfig>
  <Port Portname="portBloodpress" Portnumber="COM126"/>
  <Port Portname="portWah" Portnumber="COM146"/>
  <Port Portname="portBloodsugar" Portnumber="COM166"/>
  <Port Portname="portBloodfat" Portnumber="COM186"/>
  <Port Portname="portUric" Portnumber="COM206"/>
</PortConfig>

關鍵點總結

  1. 建立:DocumentHelper → Document → Element → Attribute
  2. 解析:SAXReader → Document → RootElement → Iterator → attributeValue()
  3. 更新:解析後用 setAttributeValue() 修改,再用 XMLWriter 寫回
  4. 格式化輸出:OutputFormat(" ", true) 產生可讀性良好的縮排 XML
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved