Разобрать XML-файлы в объекты Java в Android? - PullRequest
21 голосов
/ 29 августа 2009

В Интернете я использую API, который сортирует объекты в файлы XML. Учитывая, что XSD-файлы также доступны, я хотел бы иметь возможность отменить их возвращение в объекты Java после загрузки файлов.

После осмотра выглядит, что JAXB - библиотека по умолчанию для этого в Java, но, поскольку я разрабатываю мобильное приложение, дополнительная зависимость в 8,6 МБ просто не приемлема. Я также нашел XStream , но он все еще весит 7,9 МБ.

Изучая Android SDK, похоже, что единственный настоящий парсер XML - это SAX .

Так вот вопрос:

  1. Есть ли способ заставить SAX делать то, что я хочу?
  2. Есть ли еще какой-то инструмент в Android SDK, который я пропустил?
  3. Есть ли другая библиотека (которая значительно меньше), которая будет делать это?

Спасибо.

Ответы [ 6 ]

19 голосов
/ 25 февраля 2010

Существует платформа, которая будет работать на Android, которая выполняет привязку Java к XML с использованием аннотаций аналогично JAXB, она называется Simple и весит менее 270K, что составляет ничтожную долю от того, что требуется для XStream или JAXB , Кроме того, у него нет внешних зависимостей, только один JAR, и все должно работать. Ниже приведена ссылка на Simple и инфраструктуру XML-сериализации для Java.

http://simple.sourceforge.net

Это также может обрабатывать циклы в графах объектов.

5 голосов
/ 23 марта 2010

XStream - 431 тыс. Вам не нужен весь почтовый индекс в вашем приложении для Android. Если вы добавите парсер xpp3 pull для более быстрой работы, тогда он добавит 24k. Это займет весь ваш пакет до 455k. Все еще не идеал, но я мог бы жить с этим.

2 голосов
/ 29 августа 2009

Существует множество инструментов для перевода объектов между Java и XML, но ни один из тех, с которыми я знаком, ничуть не меньше тех, которые вы нашли. Однако, в зависимости от сложности вашего графа объектов, SAX может быть всем, что вам нужно, и у него очень мало накладных расходов. Хитрость заключается в том, чтобы построить граф объектов самостоятельно в обработчиках событий SAX. Я использовал эту технику в нескольких проектах до того, как маршалеры XML стали настолько широко доступными, и хотя это требует немного больше работы, это эффективно.

1 голос
/ 07 июля 2010

kxml2-2.2.2 - это симпатичная маленькая библиотека (43K), которая работает на JavaME, выполняет синтаксический анализ, и я успешно ее использовал. Единственная зависимость, которую он имеет, - это xmlpull, то есть 8k. Как это для маленьких?

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

0 голосов
/ 01 октября 2010

У нас есть продукт под названием XBinder, который генерирует классы и кодирует / декодирует код из XSD. Версия 2.1 занимает около 187К. Версия 2.2 (выйдет в октябре 2010 года) занимает около 101K (и ее несколько проще использовать с Android, чем v2.1). Проверьте это здесь .

0 голосов
/ 12 октября 2009

В Android SDK, кроме SAX, также доступны анализатор DOM и XMLPullParser.

Если вы не хотите полностью строить структуру данных в памяти, DOM может облегчить вашу боль - если скорость и объем памяти - это цена, которую вы готовы заплатить.

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