2012-09-18 41 views
1

我有一堆大型XML文件(所有文件的总大小都超过1 GB),我需要将它们从供应商模式转换为我们的模式。将大型XML文档从一种格式转换为另一种格式的最快且最好的方法

供应商在其服务器上的某个FTP位置有一个ZIP文件(它包含大型XML文件)。我必须选择该ZIP文件,然后转换所有可用的XML文件。在转换为我们的模式格式之后,我需要将数据保存在数据库中。

什么是一个好的设计来实现这个?什么是支持Java的相关工具和实用程序?

+0

您是否考虑过使用XSLT? –

+0

是的,目前我们正在使用XSLT。但是当xmls超过1 GB时性能不佳。...... –

+0

您使用的是哪种XSLT引擎? –

回答

0

我使用撒克逊EE转化和Woodstox的XML解组。

0

我喜欢简单的方法。我会使用任何SAX,Stax实现,并且不使用任何DOM。但它只是我,也许你会发现在这里一个花哨的图书馆,这将做所有的工作,而不是你:)

DOM中的1GB的XML可以吃你的所有公羊! - 小心你选择什么样的图书馆和他在场景背后使用什么。

我希望它有帮助!

+0

感谢您的建议。 –

4

只需使用普通的Java API ...

File zipFile = new File("archive.zip"); 
File xsltFile = new File("transform.xslt"); 
File transformedXmlsFile = new File("transformed.xml"); 

StreamSource xsltSource = new StreamSource(xsltFile); 
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsltSource); 

ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFile)); 
ZipEntry zipEntry; 
OutputStream resultXmls = new FileOutputStream(transformedXmlsFile); 
while ((zipEntry = zipIn.getNextEntry()) != null){ 
    StreamSource inputXml = new StreamSource(zipIn); 
    StreamResult resultXml = new StreamResult(resultXmls); 
    transformer.transform(inputXml, resultXml); 
} 
zipIn.close(); 
resultXmls.close(); 
+0

感谢迈克尔的建议,非常感谢。 –

+0

@Paharichora请将我的答案upvote,如果你感激它... – Michael

+0

老实说,我们已经写了相同的代码,因为你已经发布在这里。等待专家的更多建议。 –

相关问题