解析XML文档指的是,读取XML文档里的内容包含,那么读取XML文档需要工具来读取,在此我用Dom4J的SaxReader来读取XML文档。(关于Dom4J-SaxReader的概念在此就不解释了,可以在百度百科上搜索Dom4J查看其概念)
下面是简单的使用SaxReaderr来解析XML文档的示例
步骤如下:
- 使用Myeclipse创建一个项目
- 新建一个class(类)文件包含在一个package(包)下
- 在新建一个文件夹名为lib
- 将Dom4J的jar包导入到lib包下并添加至构建路径(本人使用的是dom4j-1.6.1.jar,网上搜索下载即可)
- 创建一个xml文件保存在之前建立的package(包)下 (注意:本人获取资源路径的方法是getResourceAsStream,所以必须把xml文件放在src根目录下,否则会报出异常错误:null Nested exception: null)
- 编写xml文档内容(需弄懂 根元素、根节点/子元素 的相关概念)
- 编写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文档中的一种方式