xml文档的解析(使用Dom4J-SaxReader解析)

本文介绍如何使用Dom4J的SaxReader解析XML文档,包括创建项目、配置环境、编写XML文件和Java类的过程。通过示例代码展示了如何读取XML文件中的人员信息。

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

 解析XML文档指的是,读取XML文档里的内容包含,那么读取XML文档需要工具来读取,在此我用Dom4J的SaxReader来读取XML文档。(关于Dom4J-SaxReader的概念在此就不解释了,可以在百度百科上搜索Dom4J查看其概念)

下面是简单的使用SaxReaderr来解析XML文档的示例

步骤如下:

  1. 使用Myeclipse创建一个项目
  2. 新建一个class(类)文件包含在一个package(包)下
  3. 在新建一个文件夹名为lib
  4. 将Dom4J的jar包导入到lib包下并添加至构建路径(本人使用的是dom4j-1.6.1.jar,网上搜索下载即可)
  5. 创建一个xml文件保存在之前建立的package(包)下 (注意:本人获取资源路径的方法是getResourceAsStream,所以必须把xml文件放在src根目录下,否则会报出异常错误:null Nested exception: null
  6. 编写xml文档内容(需弄懂 根元素、根节点/子元素 的相关概念)
  7. 编写class类

下面附上简单的代码示例如下:

PersonnelInformation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 人员信息 -->
<information>
	<personnel id = "2018001">
		<name>小潘</name> <!-- 姓名   -->
		<age>23</age>	<!-- 年龄 -->
		<sex>男</sex>	<!-- 性别 -->
		<dateofbith>1995年09月08日</dateofbith> <!-- 出生时间-->
		<email>123456789@qq.com</email>	<!-- 电子邮箱 -->
		<position>JAVA工程师</position> <!-- 职位 -->
		<motto>心存所向,素履以往!</motto>	<!-- 座右铭 -->
	</personnel>

	<personnel id = "2018002">
		<name>小邓</name> <!-- 姓名   -->
		<age>22</age>	<!-- 年龄 -->
		<sex>女</sex>	<!-- 性别 -->
		<dateofbith>1996年09月17日</dateofbith> <!-- 出生时间-->
		<email>11111111111@163.com</email>	<!-- 电子邮箱 -->
		<position>室内设计工程师</position> <!-- 职位 -->
		<motto>昔风不起,唯有努力生存!</motto>	<!-- 座右铭 -->
	</personnel>
</information>

SaxXml.java

package com.Test.xml;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class SaxXml {

	public static void main(String[] args) throws UnsupportedEncodingException {
		
		//创建SAXReader对象解析xml
		SAXReader saxreader = new SAXReader();
		
		//创建InputStream输入流对象获取xml文件的资源路径
		/**	(Reader读取、
		 * 	 class类文件、
		 * 	 getClassLoader类的加载、
		 * 	 getResourAsStream获取资源流(注意使用此方法必须把资源流也就是文件路径放在项目的src下
		 * 	   否则会报错出 :null Nested exception: null 异常))
		 * 	 (下面这句话的意思是读取这个类中加载xml文件资源的路径)		
		 * */
		InputStream is = SaxXml.class.getClassLoader().getResourceAsStream("PersonnelInformation.xml");
		
		try {
			//声明Document对象,访问文档的入口方法
			Document dcm = saxreader.read(is); //传入文件的资源流到read方法里,saxreader对象调用读取文件的方法
			
			//创建Element元素对象
			Element elm =null;
			
			//使用Element对象来进行Document访问获取文档的根元素的方法
			elm = dcm.getRootElement();
			//System.out.println(elm.getStringValue()); //调用getStringValue方法可以输出根元素的所有子元素的值
			
			//获取根元素的子元素的值(子元素的属性有很多个,那么就作为一个集合进行遍历)
			@SuppressWarnings("unchecked")
			Iterator<Element> elememt =elm.elementIterator(); //创建元素集合
			while(elememt.hasNext()){  //循环查看元素是否存在
				Element ee = elememt.next(); //查看下一个元素
				//获取子元素的中的id元素
				String id = ee.attributeValue("id");
				System.out.println("编号:"+id);
				
				//传入子元素中的属性
				Element ee1 = ee.element("name");
				Element ee2 = ee.element("age");
				Element ee3 = ee.element("sex");
				Element ee4 = ee.element("dateofbith");
				Element ee5 = ee.element("email");
				Element ee6 = ee.element("position");
				Element ee7 = ee.element("motto");
				
				//获取属性中的内容/值
				String name = ee1.getText();
				String age = ee2.getText();
				String sex = ee3.getText();
				String dateofbith = ee4.getText();
				String email = ee5.getText();
				String position = ee6.getText();
				String motto = ee7.getText();
				
				//输出属性的内容
				System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"性别:"+sex+
						"\n"+"出生日期:"+dateofbith+"\n"+"电子邮件:"+email+"\n"+"职业:"
						+position+"\n"+"座右铭:"+motto+"\n");
			}
				
		} catch (DocumentException e) {
			
			e.printStackTrace();
		}
	}
}

输出结果如下:

编号:2018001
姓名:小潘
年龄:23
性别:男
出生日期:1995年09月08日
电子邮件:123456789@qq.com
职业:JAVA工程师
座右铭:心存所向,素履以往!

编号:2018002
姓名:小邓
年龄:22
性别:女
出生日期:1996年09月17日
电子邮件:11111111111@163.com
职业:室内设计工程师
座右铭:昔风不起,唯有努力生存!

如果使用代码中的System.out.println(elm.getStringValue()); 这一段输出结果如下:


	
		小潘 
		23	
		男	
		1995年09月08日 
		123456789@qq.com	
		JAVA工程师 
		心存所向,素履以往!	
	

	
		小邓 
		22	
		女	
		1996年09月17日 
		11111111111@163.com	
		室内设计工程师 
		昔风不起,唯有努力生存!	
	

可观察到调用getStringValue方法可以输出根元素的所有子元素的值

以上为解析xml文档中的一种方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值