Существует ли способ точного сбора смещений байтов тегов xml с помощью XMLStreamReader?
У меня большой XML-файл, к которому мне нужен произвольный доступ. Вместо того, чтобы записывать все это в базу данных, я бы хотел один раз прогнать ее через XMLStreamReader, чтобы собрать смещения байтов значимых тегов, а затем иметь возможность использовать RandomAccessFile для получения содержимого тегов позже.
У XMLStreamReader, похоже, нет способа отслеживать смещения символов. Вместо этого люди рекомендуют подключать XmlStreamReader к считывателю, который отслеживает, сколько байтов было прочитано (например, CountingInputStream, предоставленный apache.commons.io )
например:
CountingInputStream countingReader = new CountingInputStream(new FileInputStream(xmlFile)) ;
XMLStreamReader xmlStreamReader = xmlStreamFactory.createXMLStreamReader(countingReader, "UTF-8") ;
while (xmlStreamReader.hasNext()) {
int eventCode = xmlStreamReader.next();
switch (eventCode) {
case XMLStreamReader.END_ELEMENT :
System.out.println(xmlStreamReader.getLocalName() + " @" + countingReader.getByteCount()) ;
}
}
xmlStreamReader.close();
К сожалению, должна происходить некоторая буферизация, поскольку приведенный выше код печатает одинаковые смещения байтов для нескольких тегов. Существует ли более точный способ отслеживания смещений байтов в файлах XML (в идеале, не прибегая к отказу от правильного анализа XML)?