Java解析XML文件开源库DOM4J

 更新时间:2023年01月11日 10:05:18   作者:李奈 - 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot启动过程完全解析(一)

    Spring Boot启动过程完全解析(一)

    这篇文章主要介绍了Spring Boot启动过程完全解析(一),需要的朋友可以参考下
    2017-04-04
  • Java解决约瑟夫问题代码实例

    Java解决约瑟夫问题代码实例

    这篇文章主要介绍了Java解决约瑟夫(环)问题的代码实例,决约瑟问题貌似经常出现在面试题中,需要的朋友可以参考下
    2014-03-03
  • 网络爬虫案例解析

    网络爬虫案例解析

    本文主要介绍了网络爬虫的小案例。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • IDEA上实现JDBC编程的方法步骤

    IDEA上实现JDBC编程的方法步骤

    本文主要介绍了IDEA上实现JDBC编程的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 一文教会你使用jmap和MAT进行堆内存溢出分析

    一文教会你使用jmap和MAT进行堆内存溢出分析

    本文介绍关于jmap和MAT的使用来进行堆内存溢出分析,因为这个内存溢出是我们手动构造出来的,查找比较简单,真的到了生产上面需要我们仔细排除
    2021-09-09
  • Java将字符串String转换为整型Int的两种方式

    Java将字符串String转换为整型Int的两种方式

    这篇文章主要介绍了Java如何将字符串String转换为整型Int,在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换,本文通过实例代码给大家详细讲解,需要的朋友可以参考下
    2023-04-04
  • Java基础强化训练输入错误即结束进程

    Java基础强化训练输入错误即结束进程

    本文主要介绍了Java编程的基础知识强化应用,文中实例涉及到了许多基础知识,new对象,控制台输入,if语句等。很实用,需要的朋友可以参考下
    2017-09-09
  • SpringBoot设置接口超时的方法小结

    SpringBoot设置接口超时的方法小结

    这篇文章主要介绍了SpringBoot设置接口超时的方法小结,包括配置文件,config配置类及相关示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Springboot与Maven多环境配置的解决方案

    Springboot与Maven多环境配置的解决方案

    多环境配置的解决方案有很多,我看到不少项目的多环境配置都是使用Maven来实现的,本文就实现Springboot与Maven多环境配置,感兴趣的可以了解下
    2021-06-06
  • 详解ZXing-core生成二维码的方法并解析

    详解ZXing-core生成二维码的方法并解析

    本文给大家介绍ZXing-core生成二维码的方法并解析,主要用到goggle发布的jar来实现二维码功能,对此文感兴趣的朋友一起学习吧
    2016-05-05

最新评论