用dom4j讀取xml到資料庫
一、XML知多少
對它最好的描述是:它是獨立於軟體和硬體的資訊傳輸工具。其實它是對一組規範的封裝集合,在它的領域裡,只要滿足規則,就可以傳輸。它的宗旨是傳輸資料,而不是顯示資料(html應該是顯示資料)。只要弄清楚這個前提,具體的規範不是問題。<詳見百科>
二、Dom4j
dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的。dom4j是一個十分優秀的JavaXML API,具有效能優異、功能強大和極其易使用的特點,同時它也是一個開放原始碼的軟體,可以在SourceForge上找到它。對主流的Java XML API進行的效能、功能和易用性的評測,所以可以知道
三、讀取XML的方式
1、DOM:它是面向模型的,一次將xml文件加入記憶體,程式設計簡單,適合小型檔案的解析;
2、SAX:全稱stream
API for XML。把xml文件作為一個流來處理,就像java IO中的流的概念。它是面向事件的,不像dom一次性載入xml文件,它是像Java讀寫一般檔案一樣,讀一部分解析一部分,記憶體佔用就比較少。然而效率的代價是易用性的降低,流式解析程式設計較為複雜,程式設計師需要負責更多的操作。並且由於應用程式沒有以任何方式儲存資料,所以使得更改資料或在資料流中往後移是不可能的。再加上它的單遍解析特性,意味著它也不支援隨機訪問。它適合大型檔案的解析。
3、JDOM:類似於DOM,效能上稍差,暫時不介紹了。
4、dom4j:
提出一個問題:解析xml的底層介面原本只有dom和sax兩種方式是嗎?後來才又再這個底層的基礎上封裝了jdom和dom4j嗎?Dom4j綜合應用了dom和sax兩種方式。
四、Dom4j讀取XML例項
1、xml檔案test01.xml
<?xml version="1.0" encoding="utf-8"?> <ACCESOS> <item> <SOCIO> <NUMERO>00045050</NUMERO> <REPOSICION>0</REPOSICION> <NOMBRE>MOISES MORENO</NOMBRE> <TURNOS> <LU>T1</LU> <MA>T2</MA> <MI>T3</MI> <JU>T4</JU> <VI>T5</VI> <SA>T6</SA> <DO>T7</DO> </TURNOS> </SOCIO> </item> <item> <SOCIO> <NUMERO>00045051</NUMERO> <REPOSICION>0</REPOSICION> <NOMBRE>RUTH PENA</NOMBRE> <TURNOS> <LU>S1</LU> <MA>S2</MA> <MI>S3</MI> <JU>S4</JU> <VI>S5</VI> <SA>S6</SA> <DO>S7</DO> </TURNOS> </SOCIO> </item> </ACCESOS>
2、讀取xml的Java類:
package com.drp.xml;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestXMLImport {
public static void main(String[] args) {
String sql="insert into T_XML(NUMERO, REPOSICION, NOMBRE, TURNOS) values (?, ?, ?, ?)";
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtil.getConnection();
pstmt = conn.prepareStatement(sql);
//讀取xml檔案,按路徑讀取,獲得document物件
Document doc = new SAXReader().read(new File("D:/java/MyEclipse 10/test_xmlImport/xml/test01.XML"));
//選擇xml檔案的節點
List itemList = doc.selectNodes("/ACCESOS/item/SOCIO");
//遍歷讀出的xml中的節點
for(Iterator iter = itemList.iterator(); iter.hasNext();){
Element el = (Element)iter.next();
//讀取節點的內容並賦值
String numero = el.elementText("NUMERO");
String reposicion = el.elementText("REPOSICION");
String nombre = el.elementText("NOMBRE");
//遍歷TURNOS節點中的內容
List turnosList = el.elements("TURNOS");
StringBuffer sbString = new StringBuffer();
for (Iterator iterator = turnosList.iterator(); iterator
.hasNext();) {
Element turnosElt = (Element) iterator.next();
String lu = turnosElt.elementText("LU");
String ma = turnosElt.elementText("MA");
String mi = turnosElt.elementText("MI");
String ju = turnosElt.elementText("JU");
String vi = turnosElt.elementText("VI");
String sa = turnosElt.elementText("SA");
String doo = turnosElt.elementText("DO");
sbString.append(lu + "," + ma + "," + mi + "," + ju + "," + vi + "," + sa + "," + doo);
}
//為sql語句賦值
pstmt.setString(1, numero);
pstmt.setString(2, reposicion);
pstmt.setString(3, nombre);
pstmt.setString(4, sbString.toString());
pstmt.addBatch();
}
//批量執行sql語句
pstmt.executeBatch();
System.out.print("將XML匯入資料庫成功");
} catch (Exception e) {
e.printStackTrace();
}finally{
DbUtil.close(pstmt);
DbUtil.close(conn);
}
}
}
3、效果展示
4、問題:
還對應開始的問題,dom4j中的SAXReader(),它不就是一種sax流式讀取嗎?
pstmt.executeUpdate()和pstmt.executeBatch()區別?pstmt.executeUpdate() 是一條一條發往資料庫執行,時間都消耗在資料庫連線的傳輸上面。而executeBatch是裝載了所有的sql語句,一次送到資料庫執行,執行需要很短的時間。所以再資料量大的時候,executeBatch還是很有優勢的。
總結一下心得:用過才知道它的強大!
相關推薦
用dom4j讀取xml到資料庫
一、XML知多少 對它最好的描述是:它是獨立於軟體和硬體的資訊傳輸工具。其實它是對一組規範的封裝集合,在它的領域裡,只要滿足規則,就可以傳輸。它的宗旨是傳輸資料,而不是顯示資料(html應該是顯示資料)。只要弄清楚這個前提,具體的規範不是問題。<詳見百科>
用dom4j實現xml操作
要匯入的包: dom4jUtil.java package utils; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import or
用DOM4J進行xml檔案 字串 Document之間的轉換
1、xml文件或節點轉換為字串 //xml文件或節點轉換為字串 @Test public void test5()throws Exception{ //建立SAXReader物件 SAXReader read
用php讀取xml資料
今天工作上碰到一個問題 由於我們的專案資料太少 所以需要從web search那邊借調資料,他們只給我們提供了一個xml的介面。因此,我們需要把xml的資料轉化成html呈現給大家。由於專案是基於php的,所以就摒棄了用js來讀取xml選擇了繼續使用php。不過,我以前從來沒有做過此類的嘗試 所以找
linux下用dom4j寫入xml時 報錯java.io.FileNotFoundException..(沒有那個檔案或目錄
今天在使用dom4j寫入xml檔案是報錯:java.io.FileNotFoundException..(沒有那個檔案或目錄) 但是我去讀取檔案時卻是正常的,這時我想到了linux下的許可權問題,所一我改了許可權,再試,還是這個錯誤,百度一下,發現這種錯誤大多是路徑不對或者
把Json轉Xml並且用xpath讀取xml元素(JAVA)
maven <dependency> <groupId>net.sf.json-lib</groupId> <artifactId
在用c++讀取xml檔案時,執行時出現以下錯誤:出現未處理的“System.Xml.XmlException”型別的異常出現在 system.xml.dll 中
各位高手,我剛剛開始接觸c++,使用的是Microsoft Visual Studio 2003版本,在使用c++讀取xml檔案時,編譯已經通過,但是執行.exe程式時,老是出現這個錯誤:“未處理的“System.Xml.XmlException”型別的異常出現在 syste
Dom4J讀取XML檔案時出現的connection timed out:connect Nested exception異常解決方法
最近在專案中實現一個雙資料庫的動態讀取樹形選單功能,通過了Dom4J來實現,執行過程中出現以下問題: 在本論壇查到原因為 dom4j會去拿DTD增加那些DOCTYPE的預設屬性,因此加入下面一段話即可。 解決辦法連結http://topic.csdn.ne
jdom或dom4j讀取xml檔案時如何讓dtd驗證使用本地dtd檔案或者不生效
一、寫在所有之前: 因為dom4j和jdom在這個問題上處理的方法是一模一樣的,只是一個是SAXBuilder 一個SAXReader,這裡以jdom距離,至於dom4j只需要同理替換一下就可以了。 二、問題發生的情況 當你用jdom讀取一個有 dtd驗證的xml檔案,同時
用dom4j解析xml檔案寫入記事本時,解決換行問題
} try { OutputFormat format = new OutputFormat(" ",true); format.setLineSeparator("/n/r"); XMLWriter xmlWriter = new XMLWriter(new
python讀取xml資料庫中表內所有資料,獲取資料庫中所有表的欄位名稱
工作中需要讀取指定xml資料庫中的資料以及 表所需欄位名,所以在已有例子中改進實現: xml 資料庫 xmldabase.xml: <database> <manifest> <pair key="schema_major_vsn" v
jdom 或 dom4j讀取xml檔案時如何讓dtd驗證使用本地dtd檔案或者不生效
一、寫在所有之前:因為dom4j和jdom在這個問題上處理的方法是一模一樣的,只是一個是SAXBuilder 一個SAXReader,這裡以jdom距離,至於dom4j只需要同理替換一下就可以了。二、問題發生的情況當你用jdom讀取一個有dtd驗證的xml檔案,同時你的網路是
使用DOM4J讀取XML檔案
xml 檔案: <?xml version="1.0" encoding="utf-8" ?> <Response> <e> <CLASS
使用dom4j 讀取xml檔案時的中文問題(轉)
使用dom4j 讀取xml檔案時的中文問題:(一) 在用reader.read(String filename)傳遞的是檔名的時候,遇到中文的路徑則會出錯,丟擲unknow protocol :d異常.而使用英文名則不存在該錯誤.解決辦法: 用 reader.read(new File(filename))
【python】在用dom讀取xml文件的文檔對象、元素對象的類型(用的type())時 出現<type 'instance'> 而不是具體類型時?
一個 tps env ldo article err sin https type 參考 【獲取python對象的類型名字 不希望全都只顯示<type ‘instance‘>?】 【type() 和 isinstance() 的區別】 【python中
【java】xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫
java一種簡單的解析xml方法是用DOM進行解析, dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的,dom4j用於處理xml是很常用的技術,本篇部落格介紹xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫。
使用dom4j技術來讀取xml中的信息。
XML首先根據xml路徑獲取到xml的流文件然後新建一個SAXReader對象使用SAXReader對象使用read方法讀取到xml獲得document文檔通過document文檔獲取到根節點getRootElemnet()然後通過根節點的遍歷方法獲得遍歷後的集合elementIterator();遍歷集合將
使用dataset讀取xml後 用dataview排序時為什麽不是按數字類型排序 MQsz
父親 dataview 重要 找我 con 帶來 權力 view 尋找 <p> 秋天,葉子一片片落下,帶著一絲絲的遺憾,投向大地母親的懷抱。她們跳躍著,旋轉,著,輕舞飛揚著,翩然落下。仲春時節,輕寒料峭。一個朋友的父親專程從鄉下來縣城看我,他給我帶來了滿滿的一
利用反射與dom4j讀取javabean生成對應XML和讀取XML得到對應的javabean物件集合
首先實現生成對應的JAVAbean的XML檔案方法 /** * DMO4J寫入XML * @param obj 泛型物件 * @param entityPropertys 泛型物件的List集合 * @param Encode
dom4j讀取兩個xml檔案 然後 copy
package chapter; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.