在zip中的xml文件上使用SAX解析器

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)

Gil*_*zan 7

您可以使用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)