2012-09-19 23 views
0

我有一個10+ MB的xml文件,包含有關係的節點(大約10K到20K)。java xml解析一個大文件和db關係

<.....> 
<Emplyoyee> 
    <name>Jack</name> 
    <age>35</age> 
    <supervisor></supervisor> 
    <....> 
</Emplyoyee> 
<.....> 
<.....> 
<.....> 
<Emplyoyee> 
    <name>Smith</name> 
    <age>20</age> 
    <supervisor>Jack</supervisor> 
    <....> 
</Emplyoyee> 
<.....> 

現在,我要分析此文件,並在數據庫中的所有細節存儲與所謂的「supervisorID」其中有一個字段(ID)「僱員」表。到現在爲止,我試圖製作一份所有員工名單,然後重複列表以尋找主管關係。

請建議我一個高效,快速的方式來做到這一點。我可以使用哪些庫來處理這類問題。

+0

你的意思是你已經使用它進行了解析,可以說java中的'Documentfactory',但是你需要更高效的方法嗎? – samach

+0

當你有兩個同名的「emplyoyees」[原文如此]並且都是主管時會發生什麼?如何將他們的下屬與正確的下屬聯繫起來? –

+0

@JimGarrison員工姓名與[email protected]中的xxxx相對應,因此是唯一的。我已經把這些名字簡單化了。 – itsraja

回答

1

您可以使用JAXB將數據從XML文件轉換爲Java對象,並使用Hibernate + JPA將Java對象插入數據庫。
您可以創建2 DTO
Emplyoyee - 約Emplyoyee(姓名,年齡,...)

EmplyoyeesList<Emplyoyee>爲JAXB解組

編輯的所有信息:無JAXB和JPA

您可以使用解析文件javascript併發送SQL查詢usinf Ajax

var xmlDoc = new ActiveXObject("MSXML.DOMDocument"); 
xmlDoc.async = false; 
xmlDoc.preserveWhiteSpace = true; 
xmlDoc.load(pathToFile); 
var nodes = xmlDoc.selectNodes("/Emplyoyee"); 
for (var node = nodes.nextNode(); node != null; node = nodes.nextNode()) 
{ 
    // get another nodes, create SQL query and sent it to server usinj Ajax 
} 
+0

當使用JAXB xjc爲您完成大部分工作時。有很多工具可以爲你創建一個XSD,給出一個文件樣本,它將使你獲得大部分需要用到的JAXB(我傾向於在intelliJ中使用XML工具:http://www.jetbrains.com/idea /webhelp/generating-xml-schema-from-instance-document.html)。 JAXB不僅可以爲10MB文件做這件事,我還可以在30MB文件上執行類似的任務以獲得每日供應商更新。哦,這裏是一個很好的JAXB入門http://www.oracle.com/technetwork/articles/javase/index-140168.html – feldoh

+0

您也可以從JPA實體開始,添加JAXB註釋以將這些類映射到所需的XML格式。 –

+0

由於某些原因,我無法使用Hibernate,我希望在5秒內完成(解析+持久化),並想到線程使其更快地持久化,但事實是我需要在搜索關係之前解析所有節點。員工實體的數量也可能增長到5萬到6萬。 – itsraja

1

查看由的EclipseLink提供MOXy框架。它實際上在幕後使用了JAXB實現。但也沒有ORM的東西與JPA