小编Cla*_*tin的帖子

使用StAX为XML创建索引以进行快速访问

有没有一种方法可以使用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) …

java xml stax jaxb random-access

3
推荐指数
1
解决办法
815
查看次数

标签 统计

java ×1

jaxb ×1

random-access ×1

stax ×1

xml ×1