Dom4j用SAXReader读取大XML时(1G),如何控制内存占用

我有一个大的XML文件,1G,需要用流的方式读取,我可以在拿到一个节点并处理之后就不需要这个节点的内容再在内存中了。但是Dom4j还是在内存中存储了所有节点的内容,导致OutOfMemory。如何不让Dom4j保存内存的结构呢?
代码如下
public class ExtractPersonAliasFromDBLP implements ElementHandler {
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
reader.setDefaultHandler(this);
reader.read("big.xml");
}

@Override
public void onStart(ElementPath elementPath) {

}

@Override
public void onEnd(ElementPath elementPath) {
Element dblpElm = elementPath.getCurrent();
if (!"name".equals(dblpElm.getName())) {
return;
}
dblpElm.detach();
}

}


如何才能不让Dom4j在内存中保留信息呢,我处理过的就扔掉。
试过在onEnd中加入dblpElm.detach();还是没有效果

搞定了,只要在onStart的时候将节点detach()就可以了。

你可能感兴趣的:(reader)