none
有关Dom4j读取XML的问题 RRS feed

  • 问题

  • public boolean addXMLDocument() throws Exception{-------------------------1
    SAXReader reader = new SAXReader();-------------------------2
    Document document = reader.read(new File("E:
    test
    aaaa.xml"));-------------------------3
    Element foot = document.getRootElement();-------------------------4
    Element content = foot.addElement("Content");-------------------------5
    content.addText("Hello World");-------------------------6
    XMLWriter write = new XMLWriter(new FileWriter("E:
    test
    aaaa.xml"));-------------------------7
    write.write(document);-------------------------8
    write.close();-------------------------9
    return true;-------------------------10
    }

    以上是一段用Dom4j向已存在的XML文件中追加内容的代码,我想问一下有关第三行代码的问题,我用SAXReader类的对象中的read方法读取某个XML文件的时候,是不是相当于把这个XML文件中的所有内容全部加载到了内存中,我现在做一个功能,要把某些计算结果保存下来,本来想等都计算完一起写到一个XML文件中,可是由于数据量超大,如果存到内存中的话,根本等不到全部都计算完,就报内存益处的错误了,后来我就改成每计算5000个的时候,就写一个XML文件保存,以后每写完5000个就追加到这个XML文件中,可是当我追加的时候,必须要用SAXReader类的read方法把指定的XML文件读取,然后获得该文件的根节点之后,才能继续追加内容,可是这样以来,岂不是又把我持久化到硬盘上的数据又加载回来了,那我为了避免内存不足而分批写文件的这种做法就没什么意义了。

    还有一个办法就是我每5000个文件就创建一个新的XML,这样就避免这个问题了, 可是我想知道其他更好的办法,我不想分开写。会影响我以后的功能。

    (不能用写文本文件的做法,因为我要标识每条记录。写数据库的方法也暂时不可,因为我这个功能的速度要求非常高)

    哪位高手能帮忙解决一下这个问题,最好是有什么办法能不把文件重新读回到内存中一样可以向文件追加内容的办法。或者能给我详细讲解一下SAXReader类也可以,我想知道一下他的内部机制,到网上查没有查到

    2009年6月8日 8:38

答案

  • SAXReader是一个基于stream的API   不会把所有内容加载到内存      原理同.net 的 xmlreader
    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    • 已标记为答案 伊藤诚 2009年6月9日 8:55
    2009年6月9日 3:37

全部回复

  • 这里是.Net开发论坛,你可以去找找Dom4j的论坛问问。
    MSMVP VC++
    2009年6月8日 21:26
    版主
  • SAXReader是一个基于stream的API   不会把所有内容加载到内存      原理同.net 的 xmlreader
    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    • 已标记为答案 伊藤诚 2009年6月9日 8:55
    2009年6月9日 3:37