解析巨大的XML文件以形成DOM树

时间:2015-08-17 13:04:12

标签: java xml dom

我有一个巨大的XML文件(大约904Mb),我的目标是使用以下代码将其形成DOM树:

    org.w3c.dom.Node html  = null;

     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        org.w3c.dom.Document doc = builder.parse(new File("xml_file");
        html=doc.getFirstChild();

           DocumentTraversal traversal = (DocumentTraversal) doc;

        NodeIterator iterator = traversal.createNodeIterator(
          doc.getDocumentElement(), NodeFilter.SHOW_ELEMENT, null, true);

        for (Node n = iterator.nextNode(); n != null; n = iterator.nextNode()) {
            System.out.println("Element: " + ((Element) n).getTagName());
            String tagname = ((Element) n).getTagName();

            NamedNodeMap map = ((Element)n).getAttributes();
            if(map.getLength() > 0) {

                    for(int i=0; i<map.getLength(); i++) {
                        Node node = map.item(i);
            System.out.println(node.getNodeName());

                                     }
                                                          }

但是,因为XML文件非常庞大,所以创建DOM树需要永远。这样做有什么特别的技巧吗?

2 个答案:

答案 0 :(得分:1)

使用StAX Library; StAX是一个基于事件的pull API来处理XML。 StAX将inputStream作为参数,因此不会将整个XML DOM加载到内存中,并且内存占用量很小。

This页面列出了使用StAX的原因以及与其他方法的比较。

答案 1 :(得分:0)

如果您还没有阅读本文(http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf) ,它比较了今天的一些全面的XML处理库列表。毫无疑问,最好的选择对你来说很明确......