dom4j--解析XML

本文详细介绍使用DOM4j库解析XML文件的两种方法:常规方式和XPath方式。通过具体代码示例,展示了如何读取XML文档,获取根元素及子元素信息,以及使用XPath进行精确节点选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 引用dom4j

 <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
 </dependency>
```java
package com.dom4j.demo;

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;

public class Dom4jParser {
	public static void main(String[] args) throws Exception {
		dom4jXpath("mysql");
	}

	/**
	 * dom4j常规方式解析 -> 使用命名空间方式解析
	 * @throws Exception
	 */
	private static void dom4j() throws Exception {
		// 创建SaxReader对象
		SAXReader reader = new SAXReader();
		InputStream in = Dom4jParser.class.getClassLoader().getResourceAsStream("datasource.xml");
		// 获取到文档对象
		Document document = reader.read(in);
		// 获取根元素对象
		Element rootElement = document.getRootElement();
		// System.out.println(rootElement);
		// 获取根元素下面所有子元素
		// List<Element> elements = rootElement.elements();
		// 获取根元素下面指定元素名称的子元素集合
		List<Element> elements = rootElement.elements("dataSource");

		for (Element el : elements) {
			System.out.println(el.attributeValue("id") + "-----" + el.attributeValue("class"));
			// 获取el元素下面所有子元素
			List<Element> childList = el.elements("property");

			for (Element childEl : childList) {
				String name = childEl.attributeValue("name");
				String text = childEl.getTextTrim();
				System.out.println(name + "----------" + text);
			}
			System.out.println("------------------------------------------");
		}
	}
	
	/**
	 * dom4j方式解析使用XPath 
	 * @throws Exception
	 */
	private static void dom4jXpath(String dataSourceId) throws Exception {
		// 创建SaxReader对象
		SAXReader reader = new SAXReader();
		InputStream in = Dom4jParser.class.getClassLoader().getResourceAsStream("datasource.xml");
		// 获取到文档对象
		Document document = reader.read(in);
		
		XPath xpath = document.createXPath("dataSources/dataSource[@id='"+dataSourceId+"']");
		Element dataSourceNode = (Element) xpath.selectSingleNode(document);
		System.out.println(dataSourceNode.attributeValue("id")+"----"+dataSourceNode.attributeValue("class"));
		
		xpath = document.createXPath("property");
		List<Element> propList = xpath.selectNodes(dataSourceNode);
		
		for (Element el : propList) {
		 	String name = el.attributeValue("name");
		 	String text = el.getTextTrim();
		 	System.out.println(name+"--------------"+text);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值