Dom4j框架解析XML

目录

一、前言

1.什么是XML解析

2.为什么要学习XML解析

3.怎么学习XML解析

二、XML解析器使用

1.获取Java中配置文件的路径

2.Dom4j 框架SAXReader的使用

2.1.Dom4j框架

2.2.SAXReader的使用

3.xpath的使用

3.1.什么是xpath

3.2.语法


一、前言

1.什么是XML解析

        XML解析是指将XML格式数据转换成计算机程序能够理解的数据结构的过程。XML解析器可以将XML文件解析成DOM(文档对象模型)、SAX(简单API for XML)等不同的数据结构。通过对XML文件进行解析,程序可以读取和操作其中的数据,从而实现对XML文件的数据分析和处理。常用的XML解析库包括Java中的DOM解析器和SAX解析器,C++中的libxml2库和TinyXML库,Python中的ElementTree库和lxml库等。

2.为什么要学习XML解析

1.处理XML数据:XML是广泛使用的数据存储格式,因此学习XML解析可以帮助我们读取并处理这些数据。

2.跨平台支持:由于XML可以在不同的操作系统和编程语言之间进行交换,因此学习XML解析可以使你的代码更具可移植性和互操作性。

3.对XML数据进行操作:解析XML可以使你从XML数据中获取到所需的信息,进而对其进行操作。

4.手动读取XML文件:学会XML解析之后,你可以手动读取XML文件而无需使用特殊的软件,更方便。

5.了解相关解析技术:XML解析是一种思考问题和设计算法的能力,学习后可了解相关技术,提高编程能力。

3.怎么学习XML解析

1.了解 XML 文件的基本结构和语法规则

2.掌握各种 XML 解析器的 API,如 DOM、SAX、StAX、JDOM、Dom4j 等;

3.了解 XPath 表达式的语法和使用方法;

4.应用 XML 解析器和 XPath 表达式来提取 XML 文档中的信息,了解处理 XML 数据的常用技巧;

5.实践中遇到的一些常见问题和解决方法。

二、XML解析器使用

1.获取Java中配置文件的路径

在项目中xml位置可能存在于同包、不同包、安全路径(WEB-INF)下,那我们应该用怎样的方式获取配置文件以及读取

同包的情况

 InputStream is = Test01.class.getResourceAsStream("db.properties");

		 Properties p = new Properties();
		 p.load(is);
		 System.out.println(p.getProperty("url"));

代码解析:首先使用 getResourceAsStream() 方法读取了同包下名为 db.properties 的文件, 然后通过Properties 类的 load() 方法加载了读取到的数据。 最后,通过 getProperty() 方法获取指定键(即属性名)对应的值。

不同包的情况(.properties)

 InputStream iss = Test01.class.getResourceAsStream("/config.properties");
		 //不同包只需添加“/”即可
		 Properties pp = new Properties();
		 pp.load(iss);
		 System.out.println(pp.getProperty("url"));

注意:这里的配置文件后缀都是.properties。所以要用到Properties 类,而Properties 类是 Java 提供的一个处理配置文件的工具类, 专门用于读取以键值对形式存储的配置文件。 这个工具类继承自 Hashtable类,因此在处理配置文件时,可以使用键值对进行存储和读取

不同包的情况(.xml)

InputStream is = Test01.class.getResourceAsStream("/students.xml");
		SAXReader sr=new SAXReader();
		Document read = sr.read(is);
		System.out.println(read.asXML());

这里用到的就不是Properties 类了,而是SAXReader,详细了解移至2.Dom4j 框架SAXReader的使用查看。

安全路径(WEB-INF)情况

package XW.J2EE.XML02;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 获取web-inf下的文件
 */
@WebServlet("/Test02")
public class Test02 extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		InputStream iss = request.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
		Properties pp = new Properties();
		pp.load(iss);
		System.out.println(pp.getProperty("url"));

	}

}

代码解析:通过使用 Servlet API 提供的 ServletContext 对象来读取WEB-INF 目录下的配置文件。ServletContext 对象是在应用程序启动时创建的,用于存储 Web应用程序的上下文信息。

2.Dom4j 框架SAXReader的使用

2.1.Dom4j框架

Dom4j 是一个开源的 XML 解析框架,它基于 Java 的 sax 解析器和 jaxp 解析器开发,提供了灵活简便、性能优良、扩展性强的 XML 解析和生成功能。

2.2.SAXReader的使用

SAXReader的常用方法
方法 方法描述
asXML()获取将当前节点及其所有子节点转换为 XML 字符串,并返回该字符串
read()用于从输入源中读取 XML 文档,并将其生成一个 org.dom4j.Document 对象,表示完整的 XML 文档
selectNodes()获取符合条件的节点列表,该方法会返回list集合
selectSingleNode()获取符合条件的节点。该方法会返回一个 Element 对象
getText()获取节点内容
attributeValue()获取节点属性值

案例:获取config包下student.xml

InputStream is = Test01.class.getResourceAsStream("/students.xml");
		SAXReader sr=new SAXReader();
		Document read = sr.read(is);
	
		
		//获取符合条件的节点列表,该方法会返回list集合
		List<Element> selectNodes = read.selectNodes("/students/student");
		for (Element element : selectNodes) {
			System.out.println("selectNodes:"+element.asXML());
			//获取符合条件的第一个节点。该方法会返回一个 Element 对象
			Element strele = (Element) element.selectSingleNode("name");
			//获取节点内容
			System.out.println("selectSingleNode:"+strele.getText());
			//获取节点属性
			System.out.println("attributeValue:"+element.attributeValue("sid"));
		}

注意:selectSingleNode方法返回的最好是Element对象,需要强转,如果是Node对象,有些功能可能没有。因为Element对象是Node对象的子类,由于Java多态的特点,子类更为强大。

3.xpath的使用

3.1.什么是xpath

XPath (XML Path Language) 是一种用于在 XML 文档中定位节点的语言,它提供了一种简单而强大的方式来查询、选择、遍历和修改 XML 文档中的节点元素。

3.2.语法

/ :定位路径

@ :属性

例如,我们还是拿到config包下student.xml的节点student属性为s002的学员姓名

平常的思路


		InputStream is = Test01.class.getResourceAsStream("/students.xml");
		SAXReader sr=new SAXReader();
		Document read = sr.read(is);
		//System.out.println(read.asXML());
		
		//获取符合条件的节点列表,该方法会返回list集合
		List<Element> selectNodes = read.selectNodes("/students/student");
		for (Element element : selectNodes) {
			//获取sid为‘s002’的姓名
			if("s002".equals(element.attributeValue("sid"))) {
				Element strele = (Element) element.selectSingleNode("name");
				//获取节点内容
				System.out.println(strele.getText());
			}
			
		}

xpath的思路

//xpath的使用定位路径用“/”,属性用“@”
		Element xpath = (Element) read.selectSingleNode("/students/student[@sid='s002']/name");
		String text = xpath.getText();
		System.out.println("xpath:"+text);

 结果是一样的,但是xpath更为简洁。

关于Dom4j框架解析XML就分享到这里啦!!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java方文山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值