gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:45:23 24 4
gpt4 key购买 nike

由于所处理文件的大小(50-100MB xml 文件),这可能超出了 Java VM 的能力

现在我有一组以 zip 格式发送的 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 );
}

最佳答案

您可以 parse a XML使用 InputStream 作为源。所以你可以打开一个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();
}
}

关于java - 在 zip 中的 xml 文件上使用 SAX 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12410499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com