有没有一种方法可以使用StAX和JAX-B创建索引,然后快速访问XML文件?
我有一个很大的XML文件,需要在其中查找信息。这是在桌面应用程序中使用的,因此它应在具有少量RAM的系统上工作。
所以我的想法是这样的:创建索引,然后快速从大文件访问数据。
我不能只分割文件,因为它是我想不更改地使用的官方联邦数据库。
使用XMLStreamReader,我可以快速找到一些元素,然后使用JAXB解组该元素。
final XMLStreamReader r = xf.createXMLStreamReader(filename, new FileInputStream(filename));
final JAXBContext ucontext = JAXBContext.newInstance(Foo.class);
final Unmarshaller unmarshaller = ucontext.createUnmarshaller();
r.nextTag();
while (r.hasNext()) {
final int eventType = r.next();
if (eventType == XMLStreamConstants.START_ELEMENT && r.getLocalName().equals("foo")
&& Long.parseLong(r.getAttributeValue(null, "bla")) == bla
) {
// JAX-B works just fine:
final JAXBElement<Foo> foo = unmarshaller.unmarshal(r,Foo.class);
System.out.println(foo.getValue().getName());
// But how do I get the offset?
// cache.put(r.getAttributeValue(null, "id"), r.getCursor()); // ???
break;
}
}
Run Code Online (Sandbox Code Playgroud)
但是我无法得到补偿。我想用它来准备一个索引:
(id of element) -> (offset in file) …