面试的时候问到一个问题,就是xml文件中有差不多10W个节点要读取(一个节点读取成一个对象);
读取之后保存到数据库。
我自己的想法是:dom4j解析,解析一条保存一条,不知道这样会不会内存溢出,总之思路很不清楚吧,来请教一下高人。

解决方案 »

  1.   

    100,000节点,100byte一个节点的话,10,000,000byte,也就是10M。不是很大哦。
    要是一个节点占1k的话,就是100m了,试一下一个节点能占多少空间吧。10m还没到内存溢出的地步。
    如果dom的方式不可行,就考虑sax吧。
      

  2.   

    估计就是考你 dom解析和sax解析的区别吧
      

  3.   

    晕倒,10W 个节点,也就10万个记录而已,直接搞定就行了。 哪有那么麻烦,现在主机以及数据库都那么强悍了。
    我以前把20多万个组织表全部(树结构的),全转化成 横的,LEVEL1,LEVEL2,LEVEL3这种形式。直接java,直接搞定,用的内存差不多150M,几分钟就搞定了。 如果担心数据库事务太长,可以用batch来做。不过insert 的sql语句是很快的。
      

  4.   

    XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd  schema,b: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),c:有DOM,SAX,STAX等 
        DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
    SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问 
        STAX:Streaming API for XML (StAX)
      

  5.   

    10W个节点,一个节点的内容就20个字符差不多,用dom4j内存溢出,
    用sax解析然后使用4,8楼兄弟们说的batch,可行。