有一个200M以上的XML文件,有三级节点,现在要做的是判断二级节点后,往符合条件的二级节点里面写三级节点内容。
直接用SAXReader的read方法加载整个XML文件,速度有点慢,效率太低。
用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,如果得不到整个document,就没办法写入往二级节点里添加的三级节点内容。
不知道有没有哪位高手指教下,超大XML文件修改效率高的方法,在线等,谢谢!!!

解决方案 »

  1.   

    SAXReader saxReader = new SAXReader(); 
    Document document = saxReader.read(new File(filename));
    list = document.selectNodes("/books/owner");
    Iterator iter = list.iterator();
    if(iter.hasNext()){
      Element ownerElement = (Element)iter.next();
      Element dateElement = ownerElement.addElement("date");
      dateElement.setText("2004-09-11");
      dateElement.addAttribute("type","写入日期");
    }
    writer.write(document);
    writer.close();
      

  2.   

    使用 xml database + xquery update
      

  3.   

    http://download.csdn.net/detail/hanzengyi/1693068
    百度的,记得回百度,谷歌大姐。
      

  4.   

    百度  java读写 超大XML
      

  5.   


    感谢你的回复,我已经说过此方法加载超大XML效率太低……
      

  6.   


    感谢你的回复,java中的解析方法么?能否更详细指教下,谢谢。
      

  7.   


    感谢你的回复,用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,有没有方法在读到的Element下增加子Element,然后保存起来?请指教,谢谢!
      

  8.   

    往200M的XML文件里写数据
    1. 得重新创建一个临时文件,把所有的数据都写一次,文件的内容不能在中间插入
    2. 使用SAX流的方式,一级一级的读取XML文件结点最终结果,不管你是向此XML文件里写入多少东西,都是重写一个200M的临时文件,再复制回原来的地方,最终你至少要读取400M文件,写400M文件(最后一次可以使用文件复制),速度也可想而知,没办法,你不是向文件层追加内容,而是在中间修改新的值
      

  9.   

    Dom4J是一次性读取所有文件到内存里,如果不介意读取一个200M的文件在内存中生成Dom树,是可以使用Dom4J的
      

  10.   

    追加的话,直接使用普通的IO操作就可以了,例如PrintWriter,BufferedWriter等。
      

  11.   

    我读10K 的XML也要花2-3秒,是什么问题?
      

  12.   

    dom4j我以前用的很多   不管子节点都多少以及子节点的属性有多少都可以读取  楼主怎么能乱说呢