网站首页 > java教程 正文
dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点
pom.xml中需要添加的dom4j的jar包依赖

<dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency>
test.xml
<?xml version = "1.0" encoding="UTF-8"?> <property> <proc> <datasource>jdbc:oracle:thin:@//127.0.0.1:1521/proc_data</datasource> <username>proc_user</username> <password>proc_user</password> <mapperlocation>/proc/*.xml</mapperlocation> </proc> <test> <datasource>jdbc:oracle:thin:@//127.0.0.1:1521/test_data</datasource> <username>test_user</username> <password>test_user</password> <mapperlocation>/test/*.xml</mapperlocation> </test> </property>
解析步骤
1、创建SAXReader对象
SAXReader reader = new SAXReader();
2、读取XML文件结构
Document doc = reader.read(new File(XML_PATH));
read()方法可以给一个文件路径 也可以给一个File的对象
若是多个文件,可以用下面方法读取
Resource[] resources = new PathMatchingResourcePatternResolver()
.getResources("classpath:"test/**/*.xml");
for (Resource res : resources) {
Document document = reader.read(res.getInputStream());
}
3、获取根节点
Element root = doc.getRootElement();
4、获取节点下的元素
List<Element> childList =root.elements();
//获取属性名称、属性值的方法
获取当前元素指定名称的子元素
root.element(String name)
获取当前元素的名称
root.getName()
获取当前元素的内容
root.getText()
root.getTextTrim() //去掉空格后的文本
获取当前元素下指定名称的子元素内容
root.elementText(String name)
获取当前元素的值
root.getStringValue();
具体代码实现,
注意:这个适用与熟悉xml文件的格式,标签属性的时候,根据实际需要,按属性判断实现具体的逻辑
/**
*
*/
package com.mundo.monkey.util;
import java.io.File;
import java.util.List;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @ClassName: XmlUtil
* @Description:dom4j解析xml文件
* @author Mundo
*/
public class XmlUtil {
private static final Logger logger = LoggerFactory.getLogger(XmlUtil.class);
private static final String XML_PATH = "C:\\workspace\\Monkey\\Monkey\\src\\main\\resources\\xml\\test.xml";
// 解析test.xml文件
@SuppressWarnings({ "unchecked" })
public static void main(String[] args) {
try {
// 创建SAXReader对象
SAXReader reader = new SAXReader();
// 读取XML文件结构
Document doc = reader.read(new File(XML_PATH));
// 获取XML文件根节点
Element root = doc.getRootElement();
// 获取根节点一下的子元素
List<Element> list = root.elements();
for (Element item : list) {
/**
* 实际开发中,可以在接下来的代码中,写相应的逻辑判断
*/
if ("proc".equals(item.getName())) {
System.out.println("获取生产库配置信息");
// 获取当前节点下的子元素
List<Element> node = item.elements();
// 迭代子节点的元素值
for (Element element : node) {
System.out.println("生产库属性:" + element.getName() + " ,属性值:" + element.getStringValue());
}
} else if ("test".equals(item.getName())) {
System.out.println("获取测试库配置信息");
// 获取当前节点下的子元素
List<Element> node = item.elements();
// 迭代子节点的元素值
for (Element element : node) {
System.out.println("测试库属性:" + element.getName() + " ,属性值:" + element.getStringValue());
}
}
}
} catch (Exception e) {
System.out.println("xml文件解析失败,文件路径:" + XML_PATH);
logger.error(ExceptionUtils.getStackTrace(e));
}
}
}
利用递归,获取xml文件所有的属性、属性值
/**
*
*/
package com.mundo.monkey.util;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* @ClassName: XmlUtil2
* @Description: TODO
* @author Mundo
* @date 2019年2月24日 下午9:41:40
*/
public class XmlUtil2 {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
// 创建SAXReader的对象reader
SAXReader reader = new SAXReader();
try {
// 通过reader对象的read方法读取xml文件,获取docuemnt对象。
Document document = reader
.read(new File("C:\\workspace\\Monkey\\Monkey\\src\\main\\resources\\xml\\test.xml"));
// 通过document对象获取根节点
Element root = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
Iterator it = root.elementIterator();
parseXml(root);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public static void parseXml(Element node) {
System.out.println("\n");
System.out.println("当前节点名称:" + node.getName());// 当前节点名称
System.out.println("当前节点的内容:" + node.getTextTrim());// 当前节点名称
// 递归遍历当前节点所有的子节点
List<Element> listElement = node.elements();// 所有一级子节点的list
for (Element e : listElement) {// 遍历所有一级子节点
parseXml(e);// 递归
}
}
}
每天进步一点点,你侬我侬不如码农,欢迎评论转发,欢迎关注,定时更新web开发经验,一起进步,一起提高!
猜你喜欢
- 2024-10-17 Qt开发-DOM方式解析XML(qt开发工具)
- 2024-10-17 JAVA 操作笔记-XML(六)(xml在java中怎么用)
- 2024-10-17 作为一名程序猿,你不可不知的Java基础知识的三十个经典问答
- 2024-10-17 Android中XML文件解析,现在了解还不晚
- 2024-10-17 JSP 标准标签库(JSTL)(jsp标签库有哪些)
- 2024-10-17 Spring源码阅读:Spring XML解析机制
- 2024-10-17 XML文件(xml文件怎么打开)
- 2024-10-17 Python如何解析HTML和XML数据(python解析html xml最好的模块)
- 2024-10-17 深入解析Python中的XML处理:理论与实践的结合
- 2024-10-17 XML的解析方式(xml的解析方式有哪些)
欢迎 你 发表评论:
- 12-30pc虚拟机(电脑虚拟机使用教程)
- 12-30光盘刻录机怎么刻录文件(用刻录机刻录光盘如何操作)
- 12-30腾讯安全中心实名认证(腾讯安全实名认证与更改)
- 12-30路由器管理员登录页面(路由器管理员登录网址)
- 12-30笔记本重装系统还是正版吗(笔记本重装系统好不好)
- 12-30怎么下载windows10刷机包(win10刷机包通用版下载)
- 12-30安卓系统电脑版(安卓系统电脑版叫什么)
- 12-30vs竞技平台(vs竞技平台老板)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)

本文暂时没有评论,来添加一个吧(●'◡'●)