Usando StAX para crear índice para XML para acceso rápido

¿Hay alguna manera de usar StAX y JAX-B para crear un índice y luego obtener acceso rápido a un archivo XML?

Tengo un archivo XML grande y necesito encontrar información en él. Esto se usa en una aplicación de escritorio y, por lo tanto, debería funcionar en sistemas con poca RAM.

Entonces, mi idea es la siguiente: crear un índice y luego acceder rápidamente a los datos del archivo grande.

No puedo simplemente dividir el archivo porque es una base de datos federal oficial que quiero usar sin alterar.

Usando un XMLStreamReader puedo encontrar rápidamente algún elemento y luego usar JAXB para desarmar el elemento.

    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;
        }
    }

Pero no puedo obtener el desplazamiento. Me gustaría usar esto para preparar un índice:
(id of element) -> (offset in file)

Entonces debería poder usar el desplazamiento para desmarcar simplemente desde allí: abrir la secuencia de archivos, omitir esa cantidad de bytes, desmarcar. No puedo encontrar una biblioteca que haga esto. Y no puedo hacerlo solo sin conocer la posición del cursor del archivo. losjavadoc establece claramente que hay un cursor, pero no puedo encontrar una manera de acceder a él.

Editar:
Solo estoy tratando de ofrecer una solución que funcione en hardware antiguo para que la gente pueda usarlo. No todos pueden permitirse una computadora nueva y poderosa. Usando StAX puedo obtener los datos en aproximadamente 2 segundos, lo cual es un poco largo. Pero no requiere RAM. Requiere 300 MB de RAM para usar JAX-B. El uso de algún sistema de base de datos incrustado sería una gran carga para una tarea tan simple. Usaré JAX-B de todos modos. Cualquier otra cosa sería inútil para mí ya que las clases generadas por wsimport ya son perfectas. Simplemente no quiero cargar 300 MB de objetos cuando solo necesito unos pocos.

No puedo encontrar una base de datos que solo necesita una XSD para crear una base de datos en memoria, que no usa tanta RAM. Todo está hecho para servidores o se requiere para definir un esquema y mapear el XML. Así que supongo que simplemente no existe.

Respuestas a la pregunta(1)

Su respuesta a la pregunta