Java与XML(二):使用Dom4j 操作 XML 文件

转载 2013年12月05日 13:12:06

1. Dom4j 介绍

Dom4j是开放源代码的解析XML文件的框架,它拥有本地的XPath支持,但是不支持使用XPath选择节点

虽然 DOM4J 代表了完全独立的开发结果,但最初,它是JDOM 的一种智能分支。它合并了许多超出基本 XML文档表示的功能,包括集成的 XPath支持、XML Schema 支持 以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过 DOM4J  API 和标准 DOM 接口具有并行访问功能。从2000下半年开始,它就一直处于开发 之中。为支持所有这些功能,DOM4J 使用接口和抽象基本类方法。DOM4J  大量使用了  API 中的  Collections 类,但是在许多情况下,它还提供一些替代方法以允许更好的性能或更直 接的编码方法。直接好处是,虽然  DOM4J 付出了更复杂的  API 的代价,但是它提供了比JDOM 大得多的灵活性。 在添加灵活性、XPath 集成和对大文档处理的目标时,DOM4J 的目标与 JDOM 是一样 的:针对 Java 开发者的易用性和直观操作。它还致力于成为比 JDOM 更完整的解决方案, 实现在本质上处理所有Java/XML问题的目标。在完成该目标时, 它比JDOM 更少强调防止 不正确的应用程序行为。 DOM4J 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使 用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的  Java 软件都在 使用 DOM4J 来读写 XML,特别值得一提的是连 Sun 的 JAXM也在用DOM4J。

主要的方法:

  • createDocument
  • addElement
  • setText

2. 采用Dom4j生成XML文件

测试小实例:用Dom4j创建一个XML文件

import java.io.FileWriter;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

/**
 * @Author:胡家威  
 * @CreateTime:2011-9-23 上午11:14:11
 * @Description:
 */


public class dom4jXML {

  public static void main(String[] args) {
    dom4jXML dom4j = new dom4jXML();
    dom4j.generateDocument();
  }

  public void generateDocument(){
    Document document = DocumentHelper.createDocument();
    Element booksElement = document.addElement("books");
    booksElement.addComment("A Java Book");
    Element bookElement = booksElement.addElement("book");
    bookElement.addAttribute("author", "yinger");
    Element nameElement = bookElement.addElement("name");
    nameElement.setText("Java NoteBook");
    Element priceElement = bookElement.addElement("price");
    priceElement.setText("10.00 RMB");

    try {
      XMLWriter outWriter = new XMLWriter(new FileWriter("books.xml"));
      outWriter.write(document);
      outWriter.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}

生成的文件在IE中的显示效果:

3. 实例:将数据库中表的内容导出到XML文件中

import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;

/**
 * @Author:胡家威
 * @CreateTime:2011-9-23 上午11:39:14
 * @Description:将数据库中的数据存储到XML文件中
 */


public class DBXML {

  public static void main(String[] args) {
    DBXML dbxml = new DBXML();
    dbxml.Db2XML2();
  }

  /**
   * 这种方法需要知道数据库中每一列的名称
   */

  public boolean Db2XML() {
    try {
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      String url = "jdbc:mysql://localhost/blog?user=root&password=root";
      Connection connection = DriverManager.getConnection(url);// 注意:connection是java.sql.Connection
      Statement statement = connection.createStatement();
      String sql = "select * from blog";
      ResultSet rs = statement.executeQuery(sql);

      Document document = DocumentHelper.createDocument();
      Element rootElement = document.addElement("blogs");

      while (rs.next()) {
        Element blogeElement = rootElement.addElement("blog");
        blogeElement.addAttribute("ID", rs.getString("id"));
        Element cidElement = blogeElement.addElement("categoryid");
        cidElement.setText(rs.getString("categoryid"));
        Element titleElement = blogeElement.addElement("title");
        titleElement.setText(rs.getString("title"));
        Element contentElement = blogeElement.addElement("content");
        contentElement.setText(rs.getString("content"));
        Element timeElement = blogeElement.addElement("createTime");
        timeElement.setText(rs.getString("created_time"));
      }
      rs.close();

      XMLWriter xmlWriter = new XMLWriter(new FileWriter("blogs.xml"));
      xmlWriter.write(document);
      xmlWriter.close();

      return true;
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
  }

  /**
   * 这种方法不需要,它利用了 ResultSetMetaData
   */

  public boolean Db2XML2() {
    try {
      Class.forName("org.gjt.mm.mysql.Driver").newInstance();
      String url = "jdbc:mysql://localhost/blog?user=root&password=root";
      Connection connection = DriverManager.getConnection(url);// 注意:connection是java.sql.Connection
      Statement statement = connection.createStatement();
      String sql = "select * from blog";
      ResultSet rs = statement.executeQuery(sql);
      ResultSetMetaData rsmd = rs.getMetaData();
      int cols = rsmd.getColumnCount();

      Document document = DocumentHelper.createDocument();
      Element rootElement = document.addElement("blogs");

      while (rs.next()) {
        Element blogeElement = rootElement.addElement("blog");
        for (int i= 1; i < cols; i++) {// 注意,这里i是从1开始的!
          Element element = blogeElement.addElement(rsmd.getColumnName(i));
          element.setText(rs.getString(i));
        }
      }
      rs.close();

      XMLWriter xmlWriter = new XMLWriter(new FileWriter("blogs2.xml"));
      xmlWriter.write(document);
      xmlWriter.close();

      return true;
    } catch (Exception e) {
      e.printStackTrace();
      return false;
    }
  }

}

效果展示:blog表中的数据

第一种方式:id是属性

第二种方式:id是一个子元素节点

使用dom4j对xml文件进行读取和输出操作

1.xml文件的读取     读取xml文件的方式有两种,一种是面向模型的DOM方式,一种是面向事件的SAX方式     DOM方式原理:一次性的将xml文档加入内存,在内...
  • LH9898
  • LH9898
  • 2017年03月02日 23:13
  • 659

JAVA代码-使用DOM4J解析复杂XML文件

转载自:点击打开链接今天项目需要完成一个xml数据导入的功能。第一步就是解析上传的xml文件。本来想用SAX来解析的,可是看到要导入的xml文件,心一下子就凉了,文件节点格式没有丝毫的规律可言,退而求...
  • Coder_lp
  • Coder_lp
  • 2018年01月18日 17:30
  • 32

JAVA 使用Dom4j 解析XML

解析XML的方式有很多,本文介绍使用dom4j解析xml文件
  • yyywyr
  • yyywyr
  • 2014年08月03日 18:01
  • 87024

使用dom4j解析XML为JSON

jar包为:dom4j-1.6.1.jar和fastjson-1.2.31.jar maven依赖为: dom4j dom4j 1.6.1 co...
  • sold_an
  • sold_an
  • 2017年09月26日 14:57
  • 293

java dom4j解析XML读取数据源配置的代码实例

java dom4j解析XML读取数据源配置的代码实例 源代码下载地址:http://www.zuidaima.com/share/1796449490865152.htm...
  • yaerfeng
  • yaerfeng
  • 2016年06月02日 13:42
  • 2683

java 使用DOM4J对XML文件进行增删改查操作

源代码: DOM4j.javapackage com.zc.homeWork19;import java.io.FileWriter; import java.util.ArrayList; imp...
  • zc2274460
  • zc2274460
  • 2016年04月18日 20:37
  • 4194

使用DOM4J解析大容量XML文件

dom4j本身提供了两种解析xml的方式:dom解析和sax解析。关于dom解析和sax解析各自的优缺点这里不再多述,只强调的一点是由于越来越多的应用会遇到大数据场景,SAX解析方式刚好是解决此类场景...
  • Mark_LQ
  • Mark_LQ
  • 2015年04月14日 13:19
  • 3009

使用Dom4j对XML文件的各种操作

由于同学的毕设的问题,让我给她写个对XML文件的操作的代码;还好,这里自己很熟悉;这么晚了,就把自己对Dom4j对XML文件的操作的一些心得写上来和大家分享。至于如何导入Dom4j的jar包,就不讲了...
  • vipygd
  • vipygd
  • 2012年05月20日 00:56
  • 4177

Dom4J对XML文件的读取和写入

dom4j是一个对XML文件的读取和写入,初学者写的一篇小文章。
  • lovemenghaibin
  • lovemenghaibin
  • 2015年09月19日 19:30
  • 3885

使用Dom4j创建一个XML文件

以创建下面样式的xml为例 xml version="1.0" encoding="UTF-8"?> users>   user name="tom">26.5user>   user nam...
  • Rainy_Black_Dog
  • Rainy_Black_Dog
  • 2016年09月07日 22:04
  • 975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java与XML(二):使用Dom4j 操作 XML 文件
举报原因:
原因补充:

(最多只允许输入30个字)