Java XML解析工具 dom4j介绍及使用实例

Java XML解析工具 dom4j介绍及使用实例

dom4j介绍

  dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory

  dom4j是一个简单的开源库,用于处理XML、 XPath和XSLT,它基于Java平台,使用Java的集合框架,全面集成了DOM,SAX和JAXP。

dom4j的使用

  下载了dom4j项目之后,解压缩,将其jar包(我的当前版本叫做dom4j-1.6.1.jar)加入class path下面。

  (Properties->Java Build Path -> Add External JARs...)。

  之后就可以使用其提供的API进行编程。

程序实例1

  第一个程序,用Java代码生成xml文档,代码如下:

  1. package com.example.xml.dom4j;
  2.  
  3. import java.io.FileOutputStream;
  4. import java.io.FileWriter;
  5.  
  6. import org.dom4j.Document;
  7. import org.dom4j.DocumentHelper;
  8. import org.dom4j.Element;
  9. import org.dom4j.io.OutputFormat;
  10. import org.dom4j.io.XMLWriter;
  11.  
  12. /**
  13. * dom4j框架学习 使用dom4j框架创建xml文档并输出保存
  14. *
  15. */
  16. public class Dom4JTest1
  17. {
  18.  
  19. public static void main(String[] args) throws Exception
  20. {
  21. // 第一种方式:创建文档,并创建根元素
  22. // 创建文档:使用了一个Helper类
  23. Document document = DocumentHelper.createDocument();
  24.  
  25. // 创建根节点并添加进文档
  26. Element root = DocumentHelper.createElement("student");
  27. document.setRootElement(root);
  28.  
  29. // 第二种方式:创建文档并设置文档的根元素节点
  30. Element root2 = DocumentHelper.createElement("student");
  31. Document document2 = DocumentHelper.createDocument(root2);
  32.  
  33. // 添加属性
  34. root2.addAttribute("name", "zhangsan");
  35. // 添加子节点:add之后就返回这个元素
  36. Element helloElement = root2.addElement("hello");
  37. Element worldElement = root2.addElement("world");
  38.  
  39. helloElement.setText("hello Text");
  40. worldElement.setText("world text");
  41.  
  42. // 输出
  43. // 输出到控制台
  44. XMLWriter xmlWriter = new XMLWriter();
  45. xmlWriter.write(document);
  46.  
  47. // 输出到文件
  48. // 格式
  49. OutputFormat format = new OutputFormat(" ", true);// 设置缩进为4个空格,并且另起一行为true
  50. XMLWriter xmlWriter2 = new XMLWriter(
  51. new FileOutputStream("student.xml"), format);
  52. xmlWriter2.write(document2);
  53.  
  54. // 另一种输出方式,记得要调用flush()方法,否则输出的文件中显示空白
  55. XMLWriter xmlWriter3 = new XMLWriter(new FileWriter("student2.xml"),
  56. format);
  57. xmlWriter3.write(document2);
  58. xmlWriter3.flush();
  59. // close()方法也可以
  60.  
  61. }
  62. }

  程序Console输出:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <student/>

  生成的一个xml文档:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <student name="zhangsan">
  4. <hello>hello Text</hello>
  5. <world>world text</world>
  6. </student>

程序实例2

  程序实例2,读入xml文档并分析,将其内容输出。

  首先,待分析的文档如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <students name="zhangsan">
  4. <hello name="lisi">hello Text1</hello>
  5. <hello name="lisi2">hello Text2</hello>
  6. <hello name="lisi3">hello Text3</hello>
  7. <world name="wangwu">world text1</world>
  8. <world name="wangwu2">world text2</world>
  9. <world >world text3</world>
  10. </students>

  Java代码:

  1. package com.example.xml.dom4j;
  2.  
  3. import java.io.File;
  4. import java.util.Iterator;
  5. import java.util.List;
  6.  
  7. import javax.xml.parsers.DocumentBuilder;
  8. import javax.xml.parsers.DocumentBuilderFactory;
  9.  
  10. import org.dom4j.Document;
  11. import org.dom4j.Element;
  12. import org.dom4j.io.DOMReader;
  13. import org.dom4j.io.SAXReader;
  14.  
  15. /**
  16. * dom4j框架学习: 读取并解析xml
  17. *
  18. *
  19. */
  20. public class Dom4JTest2
  21. {
  22. public static void main(String[] args) throws Exception
  23. {
  24. SAXReader saxReader = new SAXReader();
  25.  
  26. Document document = saxReader.read(new File("students.xml"));
  27.  
  28. // 获取根元素
  29. Element root = document.getRootElement();
  30. System.out.println("Root: " + root.getName());
  31.  
  32. // 获取所有子元素
  33. List<Element> childList = root.elements();
  34. System.out.println("total child count: " + childList.size());
  35.  
  36. // 获取特定名称的子元素
  37. List<Element> childList2 = root.elements("hello");
  38. System.out.println("hello child: " + childList2.size());
  39.  
  40. // 获取名字为指定名称的第一个子元素
  41. Element firstWorldElement = root.element("world");
  42. // 输出其属性
  43. System.out.println("first World Attr: "
  44. + firstWorldElement.attribute(0).getName() + "="
  45. + firstWorldElement.attributeValue("name"));
  46.  
  47. System.out.println("迭代输出-----------------------");
  48. // 迭代输出
  49. for (Iterator iter = root.elementIterator(); iter.hasNext();)
  50. {
  51. Element e = (Element) iter.next();
  52. System.out.println(e.attributeValue("name"));
  53.  
  54. }
  55.  
  56. System.out.println("用DOMReader-----------------------");
  57. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  58. DocumentBuilder db = dbf.newDocumentBuilder();
  59. // 注意要用完整类名
  60. org.w3c.dom.Document document2 = db.parse(new File("students.xml "));
  61.  
  62. DOMReader domReader = new DOMReader();
  63.  
  64. // 将JAXP的Document转换为dom4j的Document
  65. Document document3 = domReader.read(document2);
  66.  
  67. Element rootElement = document3.getRootElement();
  68.  
  69. System.out.println("Root: " + rootElement.getName());
  70.  
  71. }
  72.  
  73. }

  代码运行后输出:

  1. Root: students
  2. total child count: 6
  3. hello child: 3
  4. first World Attr: name=wangwu
  5. 迭代输出-----------------------
  6. lisi
  7. lisi2
  8. lisi3
  9. wangwu
  10. wangwu2
  11. null
  12. DOMReader-----------------------
  13. Root: students
 
 

参考资料

  圣思园张龙老师XML视频教程。

  源代码下载处:http://sourceforge.net/

  搜索dom4j:http://sourceforge.net/projects/dom4j/?source=directory

dom4解析 XML的更多相关文章

  1. dom4解析xml格式文件实例

    以下给4种常见的xml文件的解析方式的分析对比: DOM DOM4J JDOM SAX 解析XML文件的几种方式和区别答: Dom解析 在内存中创建一个DOM树,该结构通常需要加载整个文档然后才能做工 ...

  2. 使用Dom4解析xml

    XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便. XML在不同的语言环境中解析方式都是一样的,只不过实现的语法不同而已. XML的解析方式分为 ...

  3. DOm4解析xml

    1.创建XML文档对象的的方式有两种 1)Document document=DocumentHelper.createDocument(); 2)DocumentFactory documentFa ...

  4. XML的概述,.Dom4解析和SAX解析

    1.什么是XML XML 指可扩展标记语言(EXtensible Markup Language) html(hyper text markup langauge) XML 是一种标记语言,很类似 H ...

  5. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  6. Android之解析XML

    1.XML:可扩展标记语言. 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标记没有被预定义.需要自行定义标签. 它被设计为具有自我描述性. 是W3 ...

  7. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  8. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  9. Android之SAX解析XML

    一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...

随机推荐

  1. LUOGU P1967 货车运输(最大生成树+树剖+线段树)

    传送门 解题思路 货车所走的路径一定是最大生成树上的路径,所以先跑一个最大生成树,之后就是求一条路径上的最小值,用树剖+线段树,注意图可能不连通.将边权下放到点权上,但x,y路径上的lca的答案不能算 ...

  2. Joomla - 权限系统(访问权限限制)

    Joomla - 权限系统,以下以全局配置的权限设置为例,每个扩展都有自己的权限设置

  3. linux mint & ubuntu 安装QQ国际版

    ubuntu安装QQ相对简单 下载qq国际版deb文件,直接安装即可. 下载地址: http://pan.baidu.com/s/1hqmYzlU 下面就重点说一下linux mint 安装qq. 1 ...

  4. python面向对象应用-1

    #猫 定义类 class Cat: type = '猫' #通过__init__初始化的特征 def __init__(self,nickname,age,color): self.nickname ...

  5. VIsualSVN server 安装及旧仓库导入

    安装参考: 1,  http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html SVN服务器搭建和使用(一) Subversi ...

  6. storm一些可调节的参数

    # Licensed to the Apache Software Foundation (ASF) under one   # or more contributor license agreeme ...

  7. 不同版本springboot上传文件大小设置

    参考原文:https://blog.csdn.net/awmw74520/article/details/70230591 Spring Boot 1.3.x或者之前 multipart.maxFil ...

  8. File- Linux必学的60个命令

    1.作用 件内容判断文件类型,使用权限是所有用户. 2.格式 file通过探测文 file [options] 文件名 3.[options]主要参数 -v:在标准输出后显示版本信息,并且退出. -z ...

  9. Luogu P1850 换教室(期望dp)

    P1850 换教室 题意 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有\(2n\)节课程安排在\(n\)个时间段上.在第\(i(1\l ...

  10. Luogu P4782 【模板】2-SAT 问题(2-SAT)

    P4782 [模板]2-SAT 问题 题意 题目背景 \(2-SAT\)问题模板 题目描述 有\(n\)个布尔变量\(x_1\sim x_n\),另有\(m\)个需要满足的条件,每个条件的形式都是&q ...