Java与XML(二):使用Dom4j 操作 XML 文件
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是一个子元素节点