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

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

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

  1. <?xml version="1.0" encoding="gb2312"?>
  2. <students>
  3. <student age="25"><!--如果没有age属性,默认的为20-->
  4. <name>崔卫兵</name>
  5. <college>PC学院</college>
  6. <telephone>62354666</telephone>
  7. <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
  8. </student>
  9. <student>
  10. <name>cwb</name>
  11. <college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->
  12. <telephone>62358888</telephone>
  13. <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
  14. </student>
  15. <student age="45">
  16. <name>xxxxx</name>
  17. <college leader="">xxx学院</college>
  18. <telephone>66666666</telephone>
  19. <notes>注视中,注释中</notes>
  20. </student>
  21. <student age="">
  22. <name>lxx</name>
  23. <college>yyyy学院</college>
  24. <telephone>88888888</telephone>
  25. <notes>注视中111,注释中222</notes>
  26. </student>
  27. </students>

Dom4jReadExmple.java类代码如下:

  1. import java.io.File;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4.  
  5. import org.dom4j.Attribute;
  6. import org.dom4j.Document;
  7. import org.dom4j.DocumentException;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.SAXReader;
  10.  
  11. /**
  12. * 利用dom4j进行XML编程
  13. *
  14. * @author henuyuxiang
  15. * @since 2014.7.11
  16. */
  17. public class Dom4jReadExmple {
  18. /**
  19. * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中
  20. *
  21. * @param filename
  22. * String 待遍历的XML文件(相对路径或者绝对路径)
  23. * @param hm
  24. * HashMap
  25. * 存放遍历结果,格式:<nodename,nodevalue>或者<nodename+attrname,attrvalue>
  26. */
  27. public void iterateWholeXML(String filename, HashMap<String, String> hm) {
  28. SAXReader saxReader = new SAXReader();
  29. try {
  30. Document document = saxReader.read(new File(filename));
  31. Element root = document.getRootElement();
  32. // 用于记录学生编号的变量
  33. int num = -1;
  34. // 遍历根结点(students)的所有孩子节点(肯定是student节点)
  35. for (@SuppressWarnings("rawtypes")
  36. Iterator iter = root.elementIterator(); iter.hasNext();) {
  37. Element element = (Element) iter.next();
  38. num++;
  39. // 获取person节点的age属性的值
  40. Attribute ageAttr = element.attribute("age");
  41. if (ageAttr != null) {
  42. String age = ageAttr.getValue();
  43. if (age != null && !age.equals("")) {
  44. hm.put(element.getName() + "-" + ageAttr.getName()
  45. + num, age);
  46. } else {
  47. hm.put(element.getName() + "-" + ageAttr.getName()
  48. + num, "20");
  49. }
  50. } else {
  51. hm.put(element.getName() + "-age" + num, "20");
  52. }
  53. // 遍历student结点的所有孩子节点(即name,college,telphone,notes),并进行处理
  54. for (@SuppressWarnings("rawtypes")
  55. Iterator iterInner = element.elementIterator(); iterInner
  56. .hasNext();) {
  57. Element elementInner = (Element) iterInner.next();
  58. if (elementInner.getName().equals("college")) {
  59. hm.put(elementInner.getName() + num,
  60. elementInner.getText());
  61. // 获取college节点的leader属性的值
  62. Attribute leaderAttr = elementInner.attribute("leader");
  63. if (leaderAttr != null) {
  64. String leader = leaderAttr.getValue();
  65. if (leader != null && !leader.equals("")) {
  66. hm.put(elementInner.getName() + "-"
  67. + leaderAttr.getName() + num, leader);
  68. } else {
  69. hm.put(elementInner.getName() + "-"
  70. + leaderAttr.getName() + num, "leader");
  71. }
  72. } else {
  73. hm.put(elementInner.getName() + "-leader" + num,
  74. "leader");
  75. }
  76. } else {
  77. hm.put(elementInner.getName() + num,
  78. elementInner.getText());
  79. }
  80. }
  81. }
  82.  
  83. } catch (DocumentException e) {
  84. // TODO Auto-generated catch block
  85. e.printStackTrace();
  86. }
  87. }
  88. }

TestDom4jReadExmple.java类代码如下:

  1. package demo1;
  2.  
  3. import java.util.HashMap;
  4.  
  5. /**
  6. * 测试Dom4jReadExmple解析的情况
  7. *
  8. * @author henuyuxiang
  9. * @since 2014.7.11
  10. */
  11. public class TestDom4jReadExmple {
  12. public static void main(String[] args) {
  13. try {
  14. // 获取解析完后的解析信息
  15. HashMap<String, String> hashMap;
  16. Dom4jReadExmple drb = new Dom4jReadExmple();
  17. // 遍历整个XML文件
  18. hashMap = new HashMap<String, String>();
  19. drb.iterateWholeXML("studentInfo.xml", hashMap);
  20. System.out.println("姓名\t年龄\t学院\t学院领导\t电话\t备注");
  21. for (int i = 0; i < hashMap.size(); i += 6) {
  22. int j = i / 6;
  23. System.out.print(hashMap.get("name" + j) + "\t");
  24. System.out.print(hashMap.get("student-age" + j) + "\t");
  25. System.out.print(hashMap.get("college" + j) + "\t");
  26. System.out.print(hashMap.get("college-leader" + j) + "\t");
  27. System.out.print(hashMap.get("telephone" + j) + "\t");
  28. System.out.println(hashMap.get("notes" + j) + "\t");
  29. }
  30. } catch (Exception ex) {
  31. ex.printStackTrace();
  32. }
  33. }
  34. }

运行结果如下图所示:

使用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. Spring的Bean之Bean的基本概念[转]

    从前面我们知道Spring其实就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置. 对于我们而言,我们使用Spring框架 ...

  2. ubuntu环境下jdk安装及jenkins安装

    本文内容参考http://jingyan.baidu.com/article/c33e3f48a3365dea15cbb5c9.html 1 jdk下载 安装 http://www.oracle.co ...

  3. Storm常见问题处理

    错误1:发布topologies到远程集群时,出现Nimbus host is not set异常.异常内容如下所示: [root@xop-dev-a bin]# ./storm jar /home/ ...

  4. top.location != self.location

    top.location != self.location 就是说当前窗体的url和父窗体的 url是不是相同 这个是为了防止别的网站嵌入你的网站的内容(比如用iframe嵌入的你的网站的页面)

  5. vc中主线程等待子线程退出的方法

    VC线程同步,在子线程中等待另一子线程结束,通过WaitForSingleObject可以实现,但是如果在主线程中等待子线程结束,这个函数是无法完成要求的,因为它会造成主线程挂起,导致程序死掉.我们可 ...

  6. localStorage请使用getItem 和setITem

    最近看别人的代码,发现他们在从localStorage里面的时候喜欢用dot来操作,而不是get setItem,记得以前说过这个事.下面再说一次吧. 用dot方式来操作(   每次以'hello'= ...

  7. c# 获取命名空间 类名 方法名

    c# 获取命名空间 类名 方法名 转[http://blog.sina.com.cn/s/blog_3fc2dcc1010189th.html]   分类: Winform public static ...

  8. 在CentOS7部署zookeeper集群以及简单API使用

    一.部署zookeeper集群 zookeeper是一个针对大型分布式系统的协调系统,提供的功能有统一名称服务.分布式同步等. 1.上传zk安装包 2.解压     tar -xzvf zookeep ...

  9. sql 查询一段时间内某个时间点数据

     SELECT  CONVERT(VARCHAR(10), dtCreateTime, 120) AS dtStatisticsCreateDate, COUNT(1) AS nStatisticsC ...

  10. python2.7学习记录

    一.两个学习网址(2.7已经过时,建议直接学习3) http://blog.csdn.net/longxibendi/article/details/41949215 http://www.liaox ...