首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xml工具设计问题

xml工具设计问题
EN

Stack Overflow用户
提问于 2011-09-21 14:55:59
回答 3查看 222关注 0票数 2

我在一次面试中被问到了这个问题。当然,有很多解决方案的方法,但只是想知道是否有一些真正最好的方法脱颖而出。在具有512MB RAM的低端PC的硬盘中存储有2 mb的巨大的xml文件。xml文件存储时间戳和相应的字符串值。我必须设计一个工具来解析xml文件以获取特定信息,例如特定时间戳中的字符串。面试官并不关心工具中的搜索技术。考虑到只有512mn的RAM和2 2GB的工具大小,他希望获得工具设计的高级方法。对此有没有什么有趣的设计方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-21 18:31:00

对于这个用例,我将使用 SE 6中的StAX API,而不是Java。下面的代码来自一个answer of mine to a similar question。StAX用于将一个大的XML文件拆分为几个较小的文件:

代码语言:javascript
复制
import java.io.*;
import javax.xml.stream.*;
import javax.xml.transform.*;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;

public class Demo {

    public static void main(String[] args) throws Exception  {
        XMLInputFactory xif = XMLInputFactory.newInstance();
        XMLStreamReader xsr = xif.createXMLStreamReader(new FileReader("input.xml"));
        xsr.nextTag(); // Advance to statements element

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer t = tf.newTransformer();
        while(xsr.nextTag() == XMLStreamConstants.START_ELEMENT) {
            File file = new File("out/" + xsr.getAttributeValue(null, "account") + ".xml");
            t.transform(new StAXSource(xsr), new StreamResult(file));
        }
    }

}

下面是skaffman的类似回答,这里描述了如何使用StAX来处理分块的XML文档。在他的回答中,JAXB用于处理块:

票数 1
EN

Stack Overflow用户

发布于 2011-09-21 15:03:18

也许应该使用SAX而不是DOM来完成解析。与使用DOM解析器一样,在访问数据之前,您可以在内存中获得完整的文档。如果我理解正确的话,那么您从一开始就已经知道了您感兴趣的时间戳,所以您可以使用SAX解析器来获取相应的字符串值,这样应该会更快,并且不会消耗那么多内存。

票数 1
EN

Stack Overflow用户

发布于 2011-09-21 15:04:23

有两种XML解析方法: 1)使用dom解析器;2)使用sax解析器。尝试使用dom解析器解析一个具有512BRAM的2 2GB文件肯定会导致内存不足异常,因此,使用sax解析器也会更快,因为你已经知道你在寻找什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7495708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档