解析XML的方式有很多,今天我们就用Dom4j方式来解析XML文件 我们需要完成以下几个步骤
1、环境准备
(1)下载dom4j-1.6.1.jar
(2)下载junit-4.10.jar
2、温馨提示
解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Document对象是第一步,大体说来有三种方式:
(1) 自己创建Document对象
Document document = DocumentHelper.createDocument();
Element root = document.addElement("students");
其中students是根节点,可以继续添加其他节点等操作
(2) 读取XML文件获取Document对象
//创建SAXReader对象
SAXReader reader =new SAXReader();
//读取文件 转换成Document
Document document = reader.read(new File("XXXX.xml"));
(3)读取XML文本内容获取Document对象
String xmlStr = "......";
Document document = DocumentHelper.parseText(xmlStr);
3、示例
(1) xml文件内容如下
<姓名>祝汉宇
<年龄>21
<学号>1508300059
<地址>江苏省苏州市昆山巴城镇
<座右铭>要么强大,要么听话
(2) 解析过程
package com.briup.Dom;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
public class Dom4JforXML {
public void test() throws Exception {
//创建SAXReader对象
SAXReader reader =new SAXReader();
//读取文件 转换成Document
Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));
//获取根节点元素对象
Element root = document.getRootElement();
//遍历
listNodes(root);
}
//遍历当前节点下的所有节点
public void listNodes(Element node) {
System.out.println("当前节点的名称:" + node.getName());
//首先获取当前节点的所有属性节点
List 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 iterator = node.elementIterator();
while(iterator.hasNext()) {
Element e = iterator.next();
listNodes(e);
}
}
}
(3) 解析结果
当前节点的名称:student
当前节点的名称:姓名
姓名:祝汉宇
当前节点的名称:年龄
年龄:21
当前节点的名称:学号
学号:1508300059
当前节点的名称:地址
地址:江苏省苏州市昆山巴城镇
当前节点的名称:座右铭
座右铭:要么强大,要么听话
因为涉及到中文,所以在输出时要设定UTF-8编码,OutputStreamWriter进行设置编码
还有输出格式的问题,在此处使用的是OutputFormat.createPrettyPrint(),输出文档时进行了排版格式化。还有一种是OutputFormat.createCompactFormat()方法,输出内容是一行,没有进行格式化,是紧凑型的输出
已经总结完了,如有不足还望多多指点,谢谢!