超大XML文件修改,请高手指教,谢谢!
有一个200M以上的XML文件,有三级节点,现在要做的是判断二级节点后,往符合条件的二级节点里面写三级节点内容。直接用SAXReader的read方法加载整个XML文件,速度有点慢,效率太低。
用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,如果得不到整个document,就没办法写入往二级节点里添加的三级节点内容。
不知道有没有哪位高手指教下,超大XML文件修改效率高的方法,在线等,谢谢!!! --------------------编程问答--------------------
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();
--------------------编程问答-------------------- 使用 xml database + xquery update --------------------编程问答-------------------- 那就分节点加载~ --------------------编程问答-------------------- --------------------编程问答-------------------- http://download.csdn.net/detail/hanzengyi/1693068
百度的,记得回百度,谷歌大姐。。。。 --------------------编程问答-------------------- 百度 java读写 超大XML --------------------编程问答-------------------- 怒马!! --------------------编程问答--------------------
感谢你的回复,我已经说过此方法加载超大XML效率太低…… --------------------编程问答--------------------
感谢你的回复,java中的解析方法么?能否更详细指教下,谢谢。 --------------------编程问答--------------------
感谢你的回复,用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,有没有方法在读到的Element下增加子Element,然后保存起来?请指教,谢谢! --------------------编程问答-------------------- 往200M的XML文件里写数据
1. 得重新创建一个临时文件,把所有的数据都写一次,文件的内容不能在中间插入
2. 使用SAX流的方式,一级一级的读取XML文件结点
最终结果,不管你是向此XML文件里写入多少东西,都是重写一个200M的临时文件,再复制回原来的地方,最终你至少要读取400M文件,写400M文件(最后一次可以使用文件复制),速度也可想而知,没办法,你不是向文件层追加内容,而是在中间修改新的值 --------------------编程问答-------------------- Dom4J是一次性读取所有文件到内存里,如果不介意读取一个200M的文件在内存中生成Dom树,是可以使用Dom4J的 --------------------编程问答--------------------
感谢你的回复,现在的问题就是效率问题,一次性读入整个大文件速度很慢啊,
如果只是往文件后追加内容有什么办法呢?能否具体点,谢谢。
--------------------编程问答--------------------
追加的话,直接使用普通的IO操作就可以了,例如PrintWriter,BufferedWriter等。 --------------------编程问答-------------------- --------------------编程问答-------------------- 我读10K 的XML也要花2-3秒,是什么问题? --------------------编程问答-------------------- dom4j我以前用的很多 不管子节点都多少以及子节点的属性有多少都可以读取 楼主怎么能乱说呢 --------------------编程问答-------------------- 先查找节点在文件中的位置,让后直接向文件写。
补充:Java , Java SE