2013-02-09 82 views
0

我有一個xml文件(ABC.xml)DOM和SAX複製件(包括兒童),創造巨大的XML文件,我需要複製只有最佳方式,通過使用Java

<Transaction>...</Transaction>  

多次(超過100000次),保持Header和Trailer完整,創建最終大小可能高達1GB的NEW.xml。此外,我必須爲每個事務順序增加Uniqueid。

由於我新的xml,我一直在尋找這個最好的方式,並且我很困惑。 任何人都可以請幫助我做到這一點(使用DOM或SAX)和一些代碼的最佳方式。 你也可以給我一些關於它的鏈接。

ABC.xml 
======== 
<?xml version="1.0" encoding="UTF-8"?> 
<Header><Datetime><date>20130209</date><Time>01:12</Time></Datetime></Header> 
<Transaction> 
    <Uniqueid>1230001</Uniqueid> 
<Affiliate> 
    <Name>abc</Name> 
    <Address> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Address> 
    <Amount>123.00</Amount> 
    <Currency>USD</Currency> 
    <Purpose> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Purpose> 
</Affiliate> 
</Transaction> 
<Trailer><TotalTransactions>1</TotalTransactions><TotalAmount>123<TotalAmount> </Trailer> 


NEW.xml 
======= 
<?xml version="1.0" encoding="UTF-8"?> 
<Header><Datetime><date>20130209</date><Time>01:12</Time></Datetime></Header> 
<Transaction> 
<Uniqueid>1230001</Uniqueid> 
<Affiliate> 
    <Name>abc</Name> 
    <Address> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Address> 
    <Amount>123.00</Amount> 
    <Currency>USD</Currency> 
    <Purpose> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Purpose> 
</Affiliate> 
</Transaction> 
<Transaction> 
<Uniqueid>1230002</Uniqueid> 
<Affiliate> 
    <Name>abc</Name> 
    <Address> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Address> 
    <Amount>123.00</Amount> 
    <Currency>USD</Currency> 
    <Purpose> 
     <line1>aaaa</line1> 
     <line2>bbbb</line2> 
     <line3>cccc</line3> 
    </Purpose> 
</Affiliate> 
</Transaction> 
<Trailer><TotalTransactions>2</TotalTransactions><TotalAmount>246<TotalAmount></Trailer> 
+0

「巨​​大的文件」自動建議通過DOM的「SAX」:)誰知道 - 一個簡單的「sed」腳本或讀/寫循環中的Java(即簡單的文本I/O)可能更適合DOM或SAX。恕我直言... – paulsm4 2013-02-09 20:58:01

回答

0

如果您的源XML格式良好 - 它需要一個外部包裝元素,這將有所幫助。

Java中有許多XQuery處理器,例如Saxon。剛剛執行查詢

<doc>{doc/Header, for $i in 1 to 100000 return doc/Transaction, doc/Footer}</doc> 

上所提供的輸入文件,假設<doc>作爲外包裹元件。

+0

邁克,這是提供給我的示例XML,並被告知它是一個正確的,沒有外部包裝。 – cash 2013-02-10 03:31:00

+0

不要相信人們告訴你,檢查規格。從技術上講,你的示例不是一個格式良好的文檔,雖然它是一個格式良好的外部解析實體。這基本上意味着它只能用作更大XML文檔的一部分。 – 2013-02-14 21:58:37