有一个200M以上的XML文件,有三级节点,现在要做的是判断二级节点后,往符合条件的二级节点里面写三级节点内容。
直接用SAXReader的read方法加载整个XML文件,速度有点慢,效率太低。
用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,如果得不到整个document,就没办法写入往二级节点里添加的三级节点内容。
不知道有没有哪位高手指教下,超大XML文件修改效率高的方法,在线等,谢谢!!!
直接用SAXReader的read方法加载整个XML文件,速度有点慢,效率太低。
用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,如果得不到整个document,就没办法写入往二级节点里添加的三级节点内容。
不知道有没有哪位高手指教下,超大XML文件修改效率高的方法,在线等,谢谢!!!
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效率太低……
感谢你的回复,java中的解析方法么?能否更详细指教下,谢谢。
感谢你的回复,用dom4j的ElementHandler重写onEnd方法用来读取XML中某个给定的xpath节点,但读到的仅仅是该节点的Element,有没有方法在读到的Element下增加子Element,然后保存起来?请指教,谢谢!
1. 得重新创建一个临时文件,把所有的数据都写一次,文件的内容不能在中间插入
2. 使用SAX流的方式,一级一级的读取XML文件结点最终结果,不管你是向此XML文件里写入多少东西,都是重写一个200M的临时文件,再复制回原来的地方,最终你至少要读取400M文件,写400M文件(最后一次可以使用文件复制),速度也可想而知,没办法,你不是向文件层追加内容,而是在中间修改新的值