您的位置 首页 java

Java使用dom4j解析Xml文件

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</mapperlocat io n>
	</test>
</property>
 

解析步骤

1、创建SAX reader 对象

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开发经验,一起进步,一起提高!

文章来源:智云一二三科技

文章标题:Java使用dom4j解析Xml文件

文章地址:https://www.zhihuclub.com/186380.shtml

关于作者: 智云科技

热门文章

网站地图