我也在用dom方式,不过没有遇到那么大的xml文件。xerces-c有2种方式,您去试试SAX怎么样?

解决方案 »

  1.   

    sax不能解析成树形结构,不行呀
      

  2.   

    应该不是DOM溢出,是虚拟机溢出了
      

  3.   

    DOM与SAX的区别:
        DOM:处理大型文件时其性能下降的非常厉害。
    这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,
    而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问
        SAX:不现于DOM,SAX是事件驱动型的XML解析方式。
    它顺序读取XML文件,不需要一次全部装载整个文件。
    当遇到像文件开头,文档结束,或者标签开头与标签结束时,
    它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,
    适合对XML的顺序访问
      

  4.   

    可是我的jbuilder的运行参数已经将内存设置成500m了
    在没解析之前,xml文件也是在内存之中的
    只要一执行解析,就会出现outofmemory的问题
      

  5.   

    InputSource source = new InputSource(reader);
        DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = db.parse(source);
        其中reader是一个StringReader对象,用来储存需要解析的xml字符串
        当运行到Document doc = db.parse(source);的时候就发生了outofmemory的问题
        难道dom解析的能力只有十几兆?
      

  6.   

    跟你的JB的启动参数没有关系,每个java程序启动的时候,都会有相应的虚拟机(暂时这么说),这个堆栈大小是默认的,你可以在类启动参数里加上,没用用过jb,所以不是很清楚怎么加
    不过你可以试一下命令行
      

  7.   

    类似于 java -mx256M -classpath %classpath% com.neusoft.panel.XNHStart
      

  8.   

    谢谢楼上的关注,jb的参数设置就是调整虚拟机的内存大小。况且需要解析的xml字符串已在内存中了。只是在dom解析时才会出现问题。