包括三个文件: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 blocke.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 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...

  2. dom4j解析xml字符串实例

    //先加入dom4j.jar包 import java.util.HashMap; import java.util.Iterator; import java.util.Map; import or ...

  3. 【学习笔记】关于DOM4J:使用DOM4J解析XML文档

    一.概述 DOM4J是一个易用的.开源的库,用于XML.XPath和XSLT中.采用了Java集合框架并完全支持DOM.SAX.和JAXP. DOM4J最大的特色是使用大量的接口,主要接口都在org. ...

  4. Dom4j 解析Xml文档及XPath查询 学习笔记

    本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" -- 在当前浏览器页面,按键 "Ctrl+F" 按键 ...

  5. java dom xml 换行,dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件...

    网友求助:dom4j解析xml文件_用DOM解析XML文件,怎么才能让解析出来的文本不用换行_dom解析xml文件 问题importjava.text.SimpleDateFormat; import ...

  6. 使用dom4j解析XML文件

    为什么80%的码农都做不了架构师?>>>    dom4j是一个java 的XML API,用来读写XML文件. 使用dom4j解析XML文件,首先需要在官网下载dom4j-1.6. ...

  7. Dom4J 解析xml ,类查询

    /*** 从XML文件比对,传入provinceId 返回 provinceShortName * @param provinceid* @return*/public static String p ...

  8. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  9. 使用DOM4J解析XML及采用Schema校验的方法

    使用DOM4J解析XML及采用Schema校验的方法 Validation Currently dom4j does not come with a validation engine. You ar ...

最新文章

  1. 太赞了!NumPy 手写所有主流 ML 模型,由普林斯顿博士后 David Bourgin打造的史上最强机器学习基石项目!...
  2. CPU资源和可用内存大小
  3. 基于ZooKeeper的分布式Session实现
  4. tomcat内存溢出,修改设置
  5. 云计算应用之路--第三届中国云计算大会
  6. 北航 计算机学院 2011级学生会,北航学生会主席在2011级新生开学典礼发言稿.doc...
  7. 95-38-025-Buffer-Buffer
  8. [转载] Python的exec
  9. UIWebView的离线缓存
  10. 咕咕(数位dp+AC自动机)
  11. 类加载的过程(加载、验证、准备、解析、初始化)
  12. python中装饰器的用法_总结Python中装饰器的使用介绍
  13. SQL在线格式化工具
  14. python培训大数据分析师_CPDA数据分析师需要深入的学习python等工具吗?
  15. javahtml5健身房信息管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  16. Matlab模拟傅里叶变换
  17. 数据结构(C)必会知识点+易错点:数组和广义表(n维数组地址计算公式,特殊矩阵对称矩阵的存储,广义表的表示方法)
  18. untiy发布webgl开发记录
  19. 怎么给HTML文件加背景,设置文件夹背景,如何设置文件夹背景颜色
  20. linux命令之-dmesg详解

热门文章

  1. 为什么jdk源码推荐ThreadLocal使用static
  2. Linux环境HBase安装与使用
  3. 初学web标准的几个误区
  4. list控件响应鼠标键的单双击
  5. 24/4毕业设计小记
  6. jca分析java dump日志
  7. windows7 64位机上配置MinGW+Codeblocks+ wxWidgets
  8. 【TX2】TX2开发板系统默认串口有ttyS0(调试口)、ttyTHS1、ttyTHS2、ttyTHS3,通过修改设备树文件,可以新增三个串口
  9. 【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink
  10. 【Qt】通过QtCreator源码学习Qt(八):插件生命周期及对应状态(代码走读)