2. XML
eXtensible Markup Language — расширяемый язык разметки
<?xml version="1.0" encoding="UTF-8"?>
<addresses>
<address>
<name>Pupkin</name>
<city>Novosibirsk</city>
<street>Demakova</street>
<phone type=’mobile’>+79139130000</phone>
<documents>
<document type=’driving permit’>9045798749</document>
</documents>
</address>
<address>
<name>Losev</name>
<phone type=’home’>+73834913400</phone>
<documents>
<document type=’passport’>3451231231</document>
<document type=’driving permit’>43568749</document>
</documents>
</address>
</addresses>
2 Форматы хранения данных
3. XML
Плюсы:
Поддерживает Unicode.
Имеет строго заданный
синтаксис.
Стандартизован W3C.
Платформонезависим.
Есть язык преобразования
XSLT (можно, например,
сделать из XML валидный
HTML).
Минусы:
Синтаксис XML избыточен.
Размер существенно
больше, чем у других
форматов (JSON, YAML).
Неоднозначность
моделирования.
Нет поддержки типов
данных.
3 Форматы хранения данных
5. JSON
Плюсы:
Поддерживает Unicode.
Лаконичен.
Удобен для работы с
JavaScript (хипстерские
бэкенды на Node.js).
Более удобочитаем.
Большая часть бэкендов
отдаёт контент именно в
JSON.
Минусы:
Менее распространён как
формат хранения.
Выгрузка офисных
форматов зачастую
возможна только в XML.
Нет средств
преобразования,
встроенных в формат.
Меньше
стандартизованных
средств (таких, как XML
Schema, XPath, и т. д.).
5 Форматы хранения данных
6. DOM-парсер
Document Object Model — это не зависящий от платформы и
языка интерфейс, позволяющий программам получить доступ к
содержимому XML-документов, а также изменять содержимое,
структуру и оформление таких документов.
В памяти строится полное дерево, представляющее
документ.
Если документ «битый» — прочитать не удастся.
Можно выполнять различные запросы по структуре (XPath)
— //phone[@type=’mobile’]/text() выведет все
номера мобильных из документа в начале презентации.
6 Форматы хранения данных
7. SAX-парсер
SAX (англ. «Simple API for XML») — способ последовательного
чтения/записи XML-файлов (существуют аналоги и для JSON).
Push-парсер — мы обрабатываем события вида «начало
элемента», «начало атрибута».
Требуют фиксированного количества памяти для своей
работы.
Не позволяют изменять содержимое документа.
Валидируют документ по ходу чтения.
Можно прочесть часть «испорченного» документа.
Обычно быстрее, чем DOM-парсеры.
7 Форматы хранения данных
8. StAX-парсер
StAX (англ. «Streaming API for XML») — способ
последовательного чтения/записи XML-файлов (существуют
аналоги и для JSON)
Pull-парсер — мы не обрабатываем события, приходящие
от парсера, а сами инициируем обработку, вытягивая
токены.
Нам предоставляется курсор, с которым мы можем
перемещаться по токенам документа.
В Android нет самого StAX, но есть аналог — XmlPullParser.
8 Форматы хранения данных
9. Фреймворки
Позволяют делать парсинг автоматически, не задумываясь
о деталях.
Можно просто подавать класс с соответствующим
именованием полей.
Можно аннотациями задавать, что и как
сериализовать/десериализовать.
Могут возникнуть проблемы с «плохим» файлом или с
преобразованием структуры.
Разные фреймворки позволяют применять разные методы
для обхождения разных «подводных камней».
В основном они базируются на существующих DOM-
(изредка Stream-) парсерах.
9 Форматы хранения данных