解析xml(使用Dom4j)--简单高效

本文介绍了一种使用Dom4j库解析XML文件和XML格式字符串的方法。通过具体实例展示了如何读取文件并将其转换为Document对象,以及如何遍历XML元素、获取属性和文本内容。

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


今天朋友让我写一个解析xml的Demo,下面总结下:

我使用的是dom4j来解析的,所以得首先引用dom4j-1.6.1.jar。一种是解析xml文件,一种是解析xml格式字符串。

然后代码如下,要解析的xml文件在附件中。


package util;

import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 * <B>说 明</B>:
 * 
 * @author 作 者 名:郑雄伟<br/>
 *         E-mail :zhengxiongwei89@163.com
 * 
 * @version 版 本 号:V1.0.<br/>
 *          创建时间:2017年3月16日 上午11:33:55
 */
public class Dom4jDemo {

	/**
	 * 解析xml文件
	 * 
	 * @param xmlFile
	 */
	private static void parseXmlFile(File xmlFile) {

		try {
			SAXReader reader = new SAXReader();
			// 读取文件 转换成Document
			Document document = reader.read(xmlFile);
			// 获取根节点元素对象
			Element root = document.getRootElement();
			// 遍历
			listNodes(root);
		} catch (DocumentException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 解析xml字符串
	 * 
	 * @param xmlStr
	 */
	private static void parseXmlStr(String xmlStr) {

		try {
			Document document = DocumentHelper.parseText(xmlStr);
			// 获取根节点元素对象
			Element root = document.getRootElement();
			// 遍历
			listNodes(root);
		} catch (DocumentException e) {
			e.printStackTrace();
		}

	}

	@SuppressWarnings("unchecked")
	public static void listNodes(Element node) {
		System.out.println("当前节点的名称:" + node.getName());
		// 首先获取当前节点的所有属性节点
		List<Attribute> list = node.attributes();
		// 遍历属性节点
		for (Attribute attribute : list) {
			System.out.println("属性" + attribute.getName() + ":"
					+ attribute.getValue());
		}
		// 如果当前节点内容不为空,则输出
		if (!(node.getTextTrim().equals(""))) {
			System.out.println(node.getName() + ":" + node.getText());
		}
		// 同时迭代当前节点下面的所有子节点
		// 使用递归
		Iterator<Element> iterator = node.elementIterator();
		while (iterator.hasNext()) {
			Element e = iterator.next();
			listNodes(e);
		}
	}

	public static void main(String[] args) {

		// 解析xml文件
		URL resource = Dom4jDemo.class.getResource("NewFile.xml");
		try {
			File xmlFile = new File(resource.toURI());
			parseXmlFile(xmlFile);
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}

		// 解析xml字符串
		String xmlStr = "<?xml version='1.0' encoding='UTF-8'?><ECInformation Date='2016-07-26 09:35:31'><ECInfo><ProjectName>001</ProjectName><ECType>量产前设变</ECType><ECRNumber>shanxi</ECRNumber><ECNNumber>XXX</ECNNumber><ECNCreatorName>马大哥</ECNCreatorName><ECNCreatorCode>40545</ECNCreatorCode><ECTransferInfoTables><ECTransferInfoTable><ChangeObjects><ChangeObj><ChangeBefore><ChangeBeforePartNumber>123</ChangeBeforePartNumber><ChangeBeforePartName>河北</ChangeBeforePartName></ChangeBefore><ChangeAfter><ChangeAfterPartNumber>1231-AA</ChangeAfterPartNumber><ChangeAfterPartName>重庆</ChangeAfterPartName></ChangeAfter></ChangeObj></ChangeObjects></ECTransferInfoTable></ECTransferInfoTables></ECInfo></ECInformation>";
		parseXmlStr(xmlStr);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值