1,听说apache的xerces比JDK的实现快至少30倍。
但是XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
XMLReaderFactory.createXMLReader();上面2种都试了下,貌似速度上没有什么区别,几乎完全一样。 
(当然第2种的时候,我把xercesImpl.jar删除了,应该是用了jdk标准的了吧?) 
是不是我写的有问题?2, 对象XML文件虽然大但是对于我来说,许多节点是根本不需要的。
有什么set函数可以设置下自动跳过吗?使得大幅提高读XML的速度。 void setDTDHandler(DTDHandler handler) 
          允许应用程序注册 DTD 事件处理程序。 
 void setEntityResolver(EntityResolver resolver) 
          允许应用程序注册实体分析器。 
 void setErrorHandler(ErrorHandler handler) 
          允许应用程序注册错误事件处理程序。 
 void setFeature(String name, boolean value) 
          设置功能标志的值。 
 void setProperty(String name, Object value)  

解决方案 »

  1.   

    看看这篇文章:
    http://blog.csdn.net/zhouxianli/archive/2008/05/26/2482646.aspx如果你只需要处理其中的少量节点,可以考虑先用文本处理的方式把这些小段 xml 提取出来,然后再分别解析嘛。
      

  2.   

    我有个想法,你看成不成。XML再快也不如数据库快。
    1.定时执行一个导入程序。把XML的内容通过NIO的方式,导入到一个结构化的数据库表中。
    2.然后什么统计查询的,都在这个表中操作。
      

  3.   

    可能大家有误解,我们已经以以下流程作了。1,读XML文件,把需要的数据输出到中间文件里。
    2,对中间文件作统计。
    3,最终输出。但是目前的情况,我们把输出中间文件等处理都注释掉,读XML文件本身速度不理想,
    (仅读取部分对于512M文件就需要60-70秒)希望仅读取部分,一个1G的XML文件时间大概在40秒左右,整个处理能1分钟搞定。
      

  4.   

    楼主你不要乱定目标,先写个程序试试看 Java 光是读取 1G 文件,不作处理要花多少秒。那么加上处理 XML 的话,花费的时间绝多不会比这个少。
      

  5.   

    这么大的数据量似乎不太适宜用的xml处理. 是不是可以考虑其它方法? 或者把xml拆分,然后根据文件名来分类,相关的XML全部放在一个文件夹内,需要读取什么类的数据可以根据文件名来决定, 这样处理会快很多
      

  6.   

    超大XML处理不实用,最好分隔成多个小文件
      

  7.   

    请问这几个有什么区别?
    DefaultHandler, DefaultHandler2, ValidatorHandler, XMLFilterImpl, XMLReaderAdapter 目前是继承DefaultHandler在做。
      

  8.   

    当然我已通过Google查了上面的意思,我就是觉得都和提高性能没有什么关系。
    我还特别看了XMLFilterImpl
      

  9.   

    还是自己写个专用的XML解析器吧,通用的一定是比较慢的
      

  10.   

    采用面向流的STAX解释器吧,可以将XML文件读和XML文件解释放在不同的线程中,提高文件读和文件解释的并行度。
      

  11.   

    还是自己重新写一个xml解析器吧,不要有太多的对象存在,用StringBuffer和正则来过滤需要的信息。你无论用什么框架去解析10G的文件,都要去等很长的时间而且处理不好容易内存溢出
      

  12.   

    还是自己重新写一个xml解析器
      

  13.   

    在NoteBook上测试了一下JDK1.6的STAX解释器,用单线程做文件读和XML标签解释(仅判断StartElement),解释300M的XML文件只需12秒左右,似乎单线程跑STAX解释器就能满足LZ的性能要求。
      

  14.   

    1G的xml,第一次见到,长见识了。
      

  15.   

    最后发现jre1.6 比 jre1.4 和1.5的运行速度都快好多。
    在1.6下已经能达到客户需求。