Fau*_*ler 4 java zip saxparser xml-parsing
由于要处理的文件大小(50-100MB xml文件),这可能超出了Java VM的功能
现在我有一组作为拉链发送的xml文件,然后全部解压缩,然后使用SAX一次处理一个目录中的所有XML.
为了节省时间和空间(因为压缩大约是1:10),我想知道是否有办法将作为xml文件的ZipFileEntry传递给SAX处理程序.
我已经看到它使用DocumentBuilder和其他xml解析方法完成,但是对于性能(尤其是内存),我坚持使用SAX.
目前我正在以下列方式使用SAX
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
MyHandler handler = new MyHandler();
for( String curFile : xmlFiles )
{
System.out.println( "\n\n\t>>>>> open " + curFile + " <<<<<\n");
saxParser.parse( "file://" + new File( dirToProcess + curFile ).getAbsolutePath(), handler );
}
Run Code Online (Sandbox Code Playgroud)
您可以使用InputStream作为源来解析XML.因此,您可以打开ZipFile,获取所需条目的InputStream,然后解析它.请参阅getInputStream方法.
----编辑----
以下是一些指导您的代码:
for( String curFile : xmlFiles )
{
ZipFile zip = new ZipFile(new File( dirToProcess + curFile));
Enumeration<? extends ZipEntry> entries = zip.entries();
while (entries.hasMoreElements()){
ZipEntry entry = entries.nextElement();
InputStream xmlStream = zip.getInputStream(entry);
saxParser.parse( xmlStream, handler );
xmlStream.close();
}
}
Run Code Online (Sandbox Code Playgroud)