Java與XML(二):使用Dom4j 操作 XML 檔案

來源:互聯網
上載者:User

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是一個子項目節點

 

通過 Wiz 發布

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.