Простое использование синтаксического анализатора SAX не создаст представление вашего XML-дерева в памяти (именно поэтому SAX более эффективен в памяти).Он будет запускать «события» только тогда, когда встречается новый элемент XML.Вам нужно будет сохранить контекст (часто стек родительских элементов) в памяти, чтобы «знать», где вы находитесь в дереве.
Поскольку у вас не будет дерева в памяти, вы не сможетеиспользуйте XPath.Вы можете проверить только текущий «контекст» (ваш управляемый стек, управляемый вручную) для запроса вашего документа. Помните, что парсер SAX выполнит только один запуск для вашего файла, поэтому порядок в файле важен.
К счастьюЕсть другой подход, например VTD-XML , который представляет собой библиотеку, которая строит дерево XML в памяти, но только часть структуры, она не извлекает фактическое содержимое из файла, содержимое извлекается какнеобходимо.Он намного эффективнее по памяти, чем DOM-парсер, но при этом разрешает XPath.Я лично использую эту библиотеку на работе, чтобы проанализировать ~ 700 МБ XML-файлов с XPath (да, это безумие, но это работает, и это очень быстро.)