Лучший способ разобрать большой XML-документ в Jython - PullRequest
0 голосов
/ 23 февраля 2011

Мне нужно проанализировать большой (> 800 МБ) XML-файл из Jython.XML не глубоко вложен, содержит около миллиона соответствующих элементов.Мне нужно преобразовать эти элементы в реальные объекты.

Ранее я успешно использовал nu.xom.*, но теперь, когда я переключился с Java на Jython, библиотека перестала работать со следующим сообщением:

Анализатор обнаружил большечем «64 000» расширений сущностей в этом документе;это ограничение, налагаемое приложением.

Я не нашел способа исправить это, поэтому мне, вероятно, придется искать другую библиотеку XML.Это может быть Java или Jython-совместимый Python, и он должен быть эффективным.Pythonic был бы великолепен, nu.xom.* прост, но не очень pythonic.Есть ли у вас какие-либо предложения?

Ответы [ 4 ]

4 голосов
/ 25 февраля 2011

Sax - лучший способ разбора больших документов.

Похоже, вы достигли предела расширения по умолчанию. Смотрите эту заметку:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4843787

Вам необходимо установить системное свойство "entityExpansionLimit", чтобы изменить по умолчанию.

(добавлено), см. Также ответ на этот вопрос.

3 голосов
/ 25 февраля 2011

Поддерживает ли jython xml.etree.ElementTree? Если это так, используйте метод iterparse, чтобы уменьшить объем памяти. Прочитайте this и используйте elem.clear (), как описано.

3 голосов
/ 23 февраля 2011

Попробуйте использовать синтаксический анализатор SAX, он отлично подходит для потоковой передачи больших файлов XML.

0 голосов
/ 24 февраля 2011

есть библиотека lxml python, которая может анализировать большие файлы без загрузки данных в память.но я не знаю, совместим ли я с jython

...