Альтернативные реализации XML-парсера для Android - PullRequest
1 голос
/ 12 октября 2010

Я ищу решение для синтаксического анализа XML для Android, кроме встроенного парсера kXML. Я пытаюсь проанализировать большой (4 МБ +) XML-файл, загруженный с сервера, и анализатор kXML выдает ошибку OutOfMemory после попытки выделить массив размером 1 МБ + байтов при анализе. Хороший анализатор потокового XML не должен выделять такой большой массив !!

парсеру kXML v2, используемому в Android, около 7 лет. Я хотел бы попробовать что-то еще, чтобы посмотреть, решит ли это мою проблему, в идеале то, что реализует тот же интерфейс org.xmlpull.v1, так как мой код уже написан против него. Woodstox выглядит хорошим выбором и имеет адаптер XMLPullParser, но, очевидно, инженеры Android затрудняют включение библиотек javax.xml.streaming. Я вижу некоторые довольно сложные "jar-jar" обходные пути, но я бы не стал тратить кучу времени на то, чтобы возиться с Ant, если есть более простой способ. Кто-нибудь еще заставил работать еще один парсер XML pull и может указать мне на это?

Ответы [ 4 ]

1 голос
/ 13 октября 2010

Лучшее решение, которое я нашел на данный момент, - это старая библиотека Javolution, которая содержит XmlPullParser.Парсер извлечения Javolution на самом деле не реализует org.xmlpull.v1.XmlPullParser, но имеет те же сигнатуры методов, за исключением того, что его методы возвращают CharSequence вместо String.Это легко исправить, обернув его в самодельный адаптер.

К сожалению, кажется, что парсер Javolution pull устарел и не может быть найден в последних версиях JAR, но я нашел более старый файл JAR, в котором он по-прежнему есть.здесь: http://download.osgeo.org/webdav/geotools/org/javolution/javolution/3.7.1/

Также оказалось, что моя проблема заключалась в том, что мой XML-файл в конце содержал более 1 МБ символов 0x00, которые, во-первых, не являются допустимыми символами !!Однако, если кто-то захочет попробовать другой парсер, я надеюсь, что это поможет вам.

1 голос
/ 12 октября 2010

В худшем случае вы можете вернуться к SAX, который является наиболее эффективным способом использования памяти. Хотя, думаю, это большое изменение в вашем коде.

0 голосов
/ 08 октября 2013

Я использую библиотеку libgdx, и в ней реализован класс XmlReader!Просто скопируйте его и удалите этот метод parse(FileHandle file)

код ссылки: https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/utils/XmlReader.java

также используйте ObjectMap import.

0 голосов
/ 07 октября 2013

Я планирую использовать исходный код для StAX реализации, которую вы можете скачать здесь .Я только что опубликовал вопрос здесь об этом.Есть и другие реализации.как Woodstox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...