2010-12-06 2 views
0

Я новичок в разработке приложений для Android.Как разбирать огромные XML-данные из webservice в приложении Android?

Я разрабатываю приложение, которое нужно вызвать в .NET webservice и проанализировать XML-данные. Когда я разбираю обычные данные XML, он работает с DOM Parser. Но, когда данные XML огромны, тогда он выдает «Ошибка из памяти».

Есть ли другой анализатор доступен в Android для анализа больших объемов данных XML ..

Пожалуйста, помогите мне или предложить мне ..

Я действительно это нужно как можно скорее.

ответ

2

Используйте SAX parser. Анализаторы SAX предназначены для обработки огромных XML-файлов. Вместо того, чтобы загружать XML-файл в память за один раз, он просматривает документ поэтапно и уведомляет вас.

Кроме того, если XML-файл действительно большой, вы также можете посмотреть, как загружается файл. Не открывайте файл и не загружайте все содержимое в парсер SAX за один раз. Вместо этого прочитайте его кусок по блоку (например, блоки 4Kb за раз) и подайте его в парсер SAX.

Редактировать: парсер SAX работает совсем по-другому, чем парсер DOM. В принципе, он просто проходит через документ по одному элементу за раз. Всякий раз, когда он находит открытый или закрытый тег, он вызывает одну из ваших функций (в качестве обратного вызова) и сообщает ему, что такое тег и какие данные (если есть). Он начинается с самого начала и проходит до конца и никогда не возвращается. Это серийный номер. Это означает две вещи:

  • Больше кода. Ваш обратный вызов должен определять, что делать, когда встречаются определенные теги, какие теги должны быть пропущены и т. Д. Парсер SAX не возвращается, поэтому, если вам нужно что-то помнить позже, вам нужно все это сделать. Так что да, будет больше работать со многими API-интерфейсами, содержащими множество разных тегов.

  • Он может анализировать частичный XML. Не важно, что вы кормите, если только первые 4 Кбайта XML-файла. Он не будет генерировать ошибку, но просто попросите другие данные куска, когда это будет сделано. Только тогда, когда он встретит несогласованный закрывающий тег (или вы перестанете кормить его данные слишком рано), он будет генерировать ошибку.

Так что, это больше работы. Но выигрыш гораздо выше скорости и не проблема с синтаксическим анализом огромных файлов, которые не вписывались бы в память.

+0

спасибо за ваши комментарии. но можно ли легко анализировать с помощью анализатора SAX со многими столбцами? У меня 40 столбцов в API, и есть 20 таких API. Легко ли это? и Я не понимаю, как сделать кусок по куску? На мой взгляд, если мы храним только 4kb, тогда он будет хранить полный файл xml? не с отсутствующим тегом конца? помогите мне ... – Vethalam 2010-12-06 06:35:22

0

Помимо использования SAX как предложено Sander, ваш может попробовать использовать XmlPullParser вы можете найти более подробную информацию here