Java【XML 配置文件解析】

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Java【XML 配置文件解析】

前言

       最近考试周忙得要死,但我却不紧不慢,还有三天复习时间,考试科目几乎都还没学呢。今天更新一个算是工具类-XML文件的解析,感觉还是挺有用的,之后可以融进自己的项目里。

XML 配置文件解析

0、导入依赖

有点像我之前爬虫学的 Jsoup 一样,只不过 Jsoup 可以用来解析 HTML,这个是解析 XML。

 <dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.1</version>
        </dependency>

1、配置文件的两种读取方式

1.1、从同级目录读取

语法:

类名.class.getResourceAsStream("配置文件名")

案例:

编写一个数据库配置文件,放到和读取类同级的目录下:

username=root
password=123456
url=jdbc:mysql://localhost:3306/test
driver_Class5=com.mysql.jdbc.Driver
driver_Class8=com.mysql.cj.jdbc.Driver

读取:

public static void readCurrentDir(String propertyName) throws IOException {
        // todo 加载同级目录下的配置文件
        // 1. 加载配置文件,返回输入流 (底层是通过类加载器)
        InputStream in = XMLParser.class.getResourceAsStream("db.properties");
        // 2. 实例化 Properties 工具类
        Properties p = new Properties();
        // 3. 调用 load 方法加载输入流
        p.load(in);
        // 通过 getProperty 方法输出配置文件中指定key的内容
        System.out.println("username: "+p.getProperty("username"));
        System.out.println("password: "+p.getProperty("password"));
    }

2、从根目录下(resources)读取

继续把上面的配置文件放到 resources 目录下:

public static void readFromResources() throws IOException {
        // todo 加载同级目录下的配置文件
        // 1. 加载配置文件,返回输入流 (底层是通过类加载器)
        InputStream in = XMLParser.class.getResourceAsStream("/db.properties");
        // 2. 实例化 Properties 工具类
        Properties p = new Properties();
        // 3. 调用 load 方法加载输入流
        p.load(in);
        // 通过 getProperty 方法输出配置文件中指定key的内容
        System.out.println("username: "+p.getProperty("username"));
        System.out.println("password: "+p.getProperty("password"));
    }

DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。

2、XML 文件的解析

有了上面的铺垫,我们就可以把不同位置的 XML 文件都读取进来了,接下来介绍常用的简单解析方法。

Dom4j 解析过程

  1. 创建SAXReader对象。
  2. 调用SAXReader对象的 read() 方法,将XML文件读入内存,并返回一个Document对象。
  3. 通过Document对象的 getRootElement() 方法获取XML文件中的根节点(是一个 Element 对象)。
  4. 通过根节点的静态方法 elements() 获得一个子节点集合。
  5. 遍历根节点的所有子节点,获取需要的元素节点及其属性和文本内容。

打印 xml 文件内容的语法:

InputStream in = XMLParser.class.getResourceAsStream("/books.xml");
    SAXReader reader = new SAXReader();
    Document doc = reader.read(in);
    System.out.println(doc.asXML());

下面案例用到的 XML 文件。

<bookstore>
    <book category="love">
        <title lang="en">黄金时代</title>
        <author>王小波</author>
        <year>1991</year>
        <price>30.00</price>
    </book>
</bookstore>

2.1、获取标签内容

public static void dom4j_forEach() throws DocumentException {
        InputStream in = XMLParser.class.getResourceAsStream("/books.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(in);
        Element root = doc.getRootElement();
        List<Element> books = root.elements();
        for (Element book : books) {
            System.out.println("category: "+book.elementText("category"));
            System.out.println("title: "+book.elementText("title"));
            System.out.println("author: "+book.elementText("author"));
        }
    }

2.2、添加一个子标签

public static void dom4j_addSubNode() throws DocumentException {
        InputStream in = XMLParser.class.getResourceAsStream("/books.xml");
        SAXReader reader = new SAXReader();
        Document doc = reader.read(in);
        Element root = doc.getRootElement();
        List<Element> books = root.elements();
        for (Element book : books) {
            Element publish = book.addElement("publish");
            publish.addAttribute("name","publishTime");
            publish.setText("2003");
        }
        System.out.println(doc.asXML());
    }

后面用到的时候有什么新用法在来更新吧。

相关文章
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
6天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
8天前
|
XML 数据格式 Python
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
|
6天前
|
存储 算法 Java
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
本文介绍了 JVM 的内存区域划分、类加载过程及垃圾回收机制。内存区域包括程序计数器、堆、栈和元数据区,每个区域存储不同类型的数据。类加载过程涉及加载、验证、准备、解析和初始化五个步骤。垃圾回收机制主要在堆内存进行,通过可达性分析识别垃圾对象,并采用标记-清除、复制和标记-整理等算法进行回收。此外,还介绍了 CMS 和 G1 等垃圾回收器的特点。
19 0
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
|
7天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
9天前
|
Java 开发者
Java中的异常处理机制深度解析
在Java编程中,异常处理是保证程序稳定性和健壮性的重要手段。本文将深入探讨Java的异常处理机制,包括异常的分类、捕获与处理、自定义异常以及一些最佳实践。通过详细讲解和代码示例,帮助读者更好地理解和应用这一机制,提升代码质量。
12 1
|
7天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
21 2
|
11天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
15天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面