Java解析XML文件开源库DOM4J
作者:李奈 - Leemon
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件
XML解析-DOM4J
DOM4j是一個開源的,基於java的庫來解析XML文檔,它具有高度的靈活性,高性能和內存效率的API。DOM4J定義了幾個java類。以下是最常用的類:
- Document:表示整個XML文檔。文檔Document對象是通常被稱為DOM樹。
 - Element:表示一個XML元素。Element對象有方法來操作其子元素,文本,屬性和名稱空間。
 - Attribute:表示元素的屬性。屬性有方法來獲取和設置屬性的值。它有父節點和屬性類型
 - Node:代表元素,屬性或處理指令。
 
常見DOM4J的方法:
- SAXReader.read(xmlSource):構建XML源的DOM4J文檔
 - Document.getRootElement():得到的XML的根元素
 - Element.node(index):獲得在元素特定索引XML節點
 - Element.attributes():獲得一個元素的所有屬性
 - Node.valueOf(@Name):得到原件的給定名稱的屬性的值
 
解析DOM4J
使用DOM4J的步驟:
- 導入XML相關的依賴(dom4j)
 - 創建一個SAXReader
 - 從文件或數據流創建一個文檔
 - 提取根節點
 
	private volatile static SystemConfig config = null;
	public static SystemConfig newInstance() {
        if (config == null) {
            synchronized (config) {
                if (config == null) {
                    config = new SystemConfig();
                    SAXReader reader = new SAXReader();
                    try {
                        document = reader.read(configPath);
                        root = document.getRootElement();
                    } catch (DocumentException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return config;
    }
查詢DOM4J
在根節點root下通過節點名稱key查找節點內容value
//獲取節點 root.element(key); //獲取節點內容 root.element(key).getText(); root.element(key).getTextTrim(); root.element(key).getStringValue();
創建DOM4J
在根節點root下創建節點
Element element = root.addElement(key);
element.setText(value);
//將創建的節點添加進編譯後配置文件中
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
try {
      XMLWriter writer = new XMLWriter(new FileOutputStream(configPath.getPath()), format);
      writer.write(document);
} catch (IOException e) {
      e.printStackTrace();
}
舉例:
package com.lmc.util;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.List;
public class SystemConfig {
    private volatile static SystemConfig config = null;
    private static URL configPath = SystemConfig.class.getClassLoader().getResource("SystemConfig.xml");
    private static Document document;
    private static Element root;
    private static final Logger LOGGER = Logger.getLogger(SystemConfig.class);
    /**
     * 單例模式,只對外創建一個LoadConfig
     * @return
     */
    public static SystemConfig newInstance() {
        if (config == null) {
            synchronized (SystemConfig.class) {
                if (config == null) {
                    config = new SystemConfig();
                    SAXReader reader = new SAXReader();
                    try {
                        document = reader.read(configPath);
                        root = document.getRootElement();
                    } catch (DocumentException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return config;
    }
    /**
     * 通过key返回value
     * @param key
     * @return
     */
    public String getValueByKey(String key) {
        String resultvalue = null;
        if (root.element(key) == null) {
            LOGGER.error("The key is not exist!! key: " + key);
            return null;
        } else {
            resultvalue = root.element(key).getStringValue();
            if (resultvalue == null) {
                LOGGER.error("get value by key FAIL!! key: " + key);
                return null;
            }
        }
        return resultvalue;
    }
    /**
     * 通過key來設置value如果key不存在,創建新的key。
     * @param value
     * @param key
     */
    public void setValueByKey(String value, String key) {
        Element element = root.addElement(key);
        element.setText(value);
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        try {
            XMLWriter writer = new XMLWriter(new FileOutputStream(configPath.getPath()), format);
            writer.write(document);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void str(String key) {
        Element element = root.element(key);
        System.out.println(element.getText());
        System.out.println(element.getStringValue());
        System.out.println(element.getTextTrim());
    }
}
到此这篇关于Java解析XML文件开源库DOM4J的文章就介绍到这了,更多相关Java DOM4J内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
