包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), TestDom4jReadExmple.java(测试解析的结果)

代码运行前需先导入dom4j架包。

studentInfo.xml文件(该文件放在本项目目录下)内容如下:

<?xml version="1.0" encoding="gb2312"?>
<students>
<student age="25"><!--如果没有age属性,默认的为20-->
<name>崔卫兵</name>
<college>PC学院</college>
<telephone>62354666</telephone>
<notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
</student>
<student>
<name>cwb</name>
<college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->
<telephone>62358888</telephone>
<notes>男,1987年生,硕士,现就读于中国农业大学</notes>
</student>
<student age="45">
<name>xxxxx</name>
<college leader="">xxx学院</college>
<telephone>66666666</telephone>
<notes>注视中,注释中</notes>
</student>
<student age="">
<name>lxx</name>
<college>yyyy学院</college>
<telephone>88888888</telephone>
<notes>注视中111,注释中222</notes>
</student>
</students>

Dom4jReadExmple.java类代码如下:

import java.io.File;
import java.util.HashMap;
import java.util.Iterator; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; /**
* 利用dom4j进行XML编程
*
* @author henuyuxiang
* @since 2014.7.11
*/
public class Dom4jReadExmple {
/**
* 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中
*
* @param filename
* String 待遍历的XML文件(相对路径或者绝对路径)
* @param hm
* HashMap
* 存放遍历结果,格式:<nodename,nodevalue>或者<nodename+attrname,attrvalue>
*/
public void iterateWholeXML(String filename, HashMap<String, String> hm) {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File(filename));
Element root = document.getRootElement();
// 用于记录学生编号的变量
int num = -1;
// 遍历根结点(students)的所有孩子节点(肯定是student节点)
for (@SuppressWarnings("rawtypes")
Iterator iter = root.elementIterator(); iter.hasNext();) {
Element element = (Element) iter.next();
num++;
// 获取person节点的age属性的值
Attribute ageAttr = element.attribute("age");
if (ageAttr != null) {
String age = ageAttr.getValue();
if (age != null && !age.equals("")) {
hm.put(element.getName() + "-" + ageAttr.getName()
+ num, age);
} else {
hm.put(element.getName() + "-" + ageAttr.getName()
+ num, "20");
}
} else {
hm.put(element.getName() + "-age" + num, "20");
}
// 遍历student结点的所有孩子节点(即name,college,telphone,notes),并进行处理
for (@SuppressWarnings("rawtypes")
Iterator iterInner = element.elementIterator(); iterInner
.hasNext();) {
Element elementInner = (Element) iterInner.next();
if (elementInner.getName().equals("college")) {
hm.put(elementInner.getName() + num,
elementInner.getText());
// 获取college节点的leader属性的值
Attribute leaderAttr = elementInner.attribute("leader");
if (leaderAttr != null) {
String leader = leaderAttr.getValue();
if (leader != null && !leader.equals("")) {
hm.put(elementInner.getName() + "-"
+ leaderAttr.getName() + num, leader);
} else {
hm.put(elementInner.getName() + "-"
+ leaderAttr.getName() + num, "leader");
}
} else {
hm.put(elementInner.getName() + "-leader" + num,
"leader");
}
} else {
hm.put(elementInner.getName() + num,
elementInner.getText());
}
}
} } catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

TestDom4jReadExmple.java类代码如下:

package demo1;

import java.util.HashMap;

/**
* 测试Dom4jReadExmple解析的情况
*
* @author henuyuxiang
* @since 2014.7.11
*/
public class TestDom4jReadExmple {
public static void main(String[] args) {
try {
// 获取解析完后的解析信息
HashMap<String, String> hashMap;
Dom4jReadExmple drb = new Dom4jReadExmple();
// 遍历整个XML文件
hashMap = new HashMap<String, String>();
drb.iterateWholeXML("studentInfo.xml", hashMap);
System.out.println("姓名\t年龄\t学院\t学院领导\t电话\t备注");
for (int i = 0; i < hashMap.size(); i += 6) {
int j = i / 6;
System.out.print(hashMap.get("name" + j) + "\t");
System.out.print(hashMap.get("student-age" + j) + "\t");
System.out.print(hashMap.get("college" + j) + "\t");
System.out.print(hashMap.get("college-leader" + j) + "\t");
System.out.print(hashMap.get("telephone" + j) + "\t");
System.out.println(hashMap.get("notes" + j) + "\t");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

运行结果如下图所示:

使用dom4j解析XML例子的更多相关文章

  1. dom4j解析xml文档全面介绍

    一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...

  2. dom4j解析xml字符串实例

    DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  3. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  4. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  5. Dom4j解析xml

    public class Dom4jTest { // Dom4j解析xml // 因为所有的方法都需要Dom树 static Document document = null; static Ele ...

  6. 使用dom4j解析XML文档

    dom4j的包开源包,不属于JDK里面,在myeclipse中要单独导入在项目中,这里不累赘了 做这个过程,很慢,因为很多方法没用过不熟悉,自己得去查帮助文档,而且还得去试,因为没有中文版,英文翻译不 ...

  7. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  8. 用DOM4J解析XML文件案例

    用DOM4J解析XML文件案例,由于DOM4J不像JAXP属于JAVASE里,所以如果要使用DOM4J,则必须额外引入jar包,如图:

  9. java使用dom4j解析xml文件

    关于xml的知识,及作用什么的就不说了,直接解释如何使用dom4j解析.假如有如下xml: dom4j解析xml其实很简单,只要你有点java基础,知道xml文件.结合下面的xml文件和java代码, ...

随机推荐

  1. 3DTouch--2

    苹果太贱了! 3D Touch 只能在真机上面试,模拟器没办法玩! ------------- 描述有点粗燥.....有6S 在手上玩得童鞋会更加清楚,只有玩过才更加体验到. 首先 有几个要知道的手势 ...

  2. HDU 1695 GCD#容斥原理

    http://acm.hdu.edu.cn/showproblem.php?pid=1695 翻译题目:给五个数a,b,c,d,k,其中恒a=c=1,x∈[a,b],y∈[c,d],求有多少组(x,y ...

  3. wep密钥的长度

    理论上,WEP可以搭配任意长度的密钥,因为RC4并未要求非得使用特定长度的密钥. 不过,大多数产品均支持一种或两种长度的密钥.唯一出现在标准中的密钥长度时64位的WEP种子(seed),其中40位是两 ...

  4. runtime官方文档

    OC是一种面向对象的动态语言,作为初学者可能大多数人对面向对象这个概念理解的比较深,而对OC是动态语言这一特性了解的比较少.那么什么是动态语言?动态语言就是在运行时来执行静态语言的编译链接的工作.这就 ...

  5. MySQL binlog 查看信息

    1)按时间筛选 mysqlbinlog --start-datetime="2009-09-14 0:20:00" --stop-datetim="2009-09-15 ...

  6. 在block函数中规避错误信息 "capturing self strongly in this block is likely to lead to a retain cycle”

    以形如 _fontValueChangedBlock = ^(){ [self.fontSmallButton addTarget:self action:@selector(btnFontSmall ...

  7. Jquery EasyUI datagrid后台数据表格生成及分页详解

    由于项目原因,网站后台需要对用户信息进行各种操作,有时还需要进行批量操作,所以首先需要将用户信息展示出来,查了不少资料.发现Jquery EasyUI确实是一个不错的选择,功能强大,文档也比较全面,而 ...

  8. 嵌套json

    今天一个客户问怎样把表中相同键值对应的文本按照一定顺序拼接起来.如果使用SQL实现将非常麻烦,并且效率低下.GP4.1以后提供了一个函数array_agg可以方便快捷,高效的实现该功能 比如原始查询是 ...

  9. [NPOI2.0] 使用NPOI读取和导出Excel文件

    先来说下一直使用的 Microsoft.Office.Interop.Excel ,在系统正式使用时遇到的问题 1:Excel读取数据BUG 由于使用Microsoft.Office.Interop. ...

  10. 用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据的解决办法

    用非GUI模式执行测试,jp@gc - PerfMon Metrics Collector会出现无法获取正确数据(实际显示的是Response Times Over Time),解决办法:在GUI模式 ...