Сжатие может радикально уменьшить большой размер XML файла, который имеет влияние на:Как хранить большие заархивированные XML-файлы и эффективно извлекать только отдельные данные (Alfresco)?
- использования пространства хранения, IO Уэйтса (чтения и записи)
- использование сети
Я должен извлечь только некоторые конкретные данные из zipped XML. Это Носорог JavaScript (в основном Java) Пример:
var zis = new java.util.zip.ZipInputStream(document.properties.content.getInputStream());
var ze = zis.getNextEntry();
if (ze!=null){
var scanner = new java.util.Scanner(zis,"UTF-8").useDelimiter("\\A");
var content = scanner.hasNext() ? scanner.next() : "";
var docXml = new XML(content);
logger.log("xml mytag/text(): "+docXml.mytag);
}
zis.closeEntry();
zis.close();
Но, нет необходимости загружать весь XML в DOM, если я должен извлечь только некоторые специфические элементы (из заголовка XML, например). Алгоритм должен перестать читать XML-файл, когда все запрошенные элементы будут найдены (или нет возможности их найти).
Есть ли предоставленная служба Alfresco или java-библиотека, которая делает это и извлекает запрошенные элементы из XML с использованием, например, StAX2 API (Woodstox)?
Не кажется легким. Можете ли вы рассказать нам, как бы вы определили, что нужно для восстановления? Это может быть, например, первый тег non root, тэг 300th, все текстовое содержимое ... Возможно, есть способы сделать это как можно быстрее, если мы это узнаем. –
GPI
@GPI - например, карта (hashmap) путей – wildloop
Вы можете использовать Stax2/Woodstox для извлечения необходимых XML-частей, а затем запускать XPaths. Это нелегко сделать (множество дьяволов в деталях). Я нашел старый [блог] (http://andreas.haufler.info/2012/01/conveniently-processing-large-xml-files.html), объясняющий технику, и связанный с ней исходный код перемещался, но, похоже, поддерживается [здесь] (https://github.com/scireum/sirius-kernel/tree/master/src/main/java/sirius/kernel/xml). Я не использовал его, но он может быть достаточно для того, что вам нужно. – vanOekel