SlideShare a Scribd company logo
1 of 13
Download to read offline
XML, JSON
Android
Константин Золотов
eXtensible Markup Language
1 <?xml version="1.0" encoding="UTF-8"?>
2 <addresses>
3 <address>
4 <name>Pupkin</name>
5 <city>Novosibirsk</city>
6 <street>Demakova</street>
7 <phone type="mobile">+79139130000</phone>
8 <documents>
9 <document type="driving permit">9045798749</document>
10 </documents>
11 </address>
12 <address>
13 <name>Losev</name>
14 <phone type="home">+73834913400</phone>
15 <documents>
16 <document type="passport">3451231231</document>
17 <document type="driving permit">43568749</document>
18 </documents>
19 </address>
20 </addresses>
XML namespace
Позволяют относить элементы и атрибуты с одинаковыми именами к разным группам
Namespace обязательно является URI
Все элементы внутри пространства уникальны
XML namespace
1 <root>
2 <h:table xmlns:h="http://www.w3.org/TR/html4/">
3 <h:tr>
4 <h:td>Apples</h:td>
5 <h:td>Bananas</h:td>
6 </h:tr>
7 </h:table>
8
9 <f:table xmlns:f="http://www.w3schools.com/furniture">
10 <f:name>African Coffee Table</f:name>
11 <f:width>80</f:width>
12 <f:length>120</f:length>
13 </f:table>
14 </root>
Плюсы и минусы XML
Поддерживает Unicode
Имеет строго заданный
синтаксис
Стандартизирован W3C
Платформонезависим
Существует язык запросов к
элементам документа XPath
Существует язык
преобразования XSLT (eXtensible
Stylesheet Language
Transformations), позволяющий
трансформировать XML в HTML
Избыточный синтаксис
Существенно больший размер,
нежели JSON, YAML
Неоднозначность
моделирования (атрибуты vs
элементы)
Нет поддержки типов данных
JavaScript Object Notation
Является подмножеством YAML
Представлен как набор пар ключ-значение
Поддерживает несколько типов данных: строка, литерал (true/false/null), число, объект({}),
массив([])
JavaScript Object Notation
1 {"addresses": [
2 {
3 "name": "Pupkin",
4 "city": "Novosibirsk",
5 "street": "Demakova",
6 "phones": {
7 "mobile": "+79139130000"
8 },
9 "documents": {
10 "driving permit": "123DP"
11 }
12 },
13 {
14 "name": "Losev",
15 "phones": {
16 "home": "+73834913400"
17 },
18 "documents": {
19 "passport": "3451231231",
20 "driving permit": "43568749"
21 }
22 }
23 ]}
Плюсы и минусы JSON
Поддерживает Unicode
Лаконичен
Нативная поддержка в
JacaScript
Удобочитаем
Большинство сервисов
используют именно для
передачи данных JSON
Менее распространен как
формат хранения
Выгрузка офисных форматов
зачастую возможна только в
XML
Нет средств преобразования
встроенных в формат
Меньше стандартизированных
средств (таких, как XPath, XML
Schema)
DOM, DOM-парсер
Document Object Model — это не зависящий от платформы и языка интерфейс, позволяющий
программам получить доступ к содержимому XML-документов, а также изменять содержимое,
структуру и оформление таких документов. В памяти строится полное дерево,
представляющее документ. Если документ «битый» — прочитать не удастся. Можно
выполнять различные запросы по структуре (XPath) — //phone[@type=’mobile’]/text() выведет
все номера мобильных из документа в начале презентации.
SAX-парсер
SAX (англ. «Simple API for XML») — способ последовательного чтения/записи XML-файлов
(существуют аналоги и для JSON). Push-парсер — мы обрабатываем события вида «начало
элемента», «начало атрибута». Требуют фиксированного количества памяти для своей работы.
Не позволяют изменять содержимое документа. Валидируют документ по ходу чтения. Можно
прочесть часть «испорченного» документа. Обычно быстрее, чем DOM-парсеры
StAX-парсер
StAX (англ. «Streaming API for XML») — способ последовательного чтения/записи XML-файлов
(существуют аналоги и для JSON) Pull-парсер — мы не обрабатываем события, приходящие от
парсера, а сами инициируем обработку, вытягивая токены. Нам предоставляется курсор, с
которым мы можем перемещаться по токенам документа. В Android нет самого StAX, но есть
аналог — XmlPullParser
Фреймворки
Позволяют делать парсинг автоматически, не задумываясь о деталях.
Можно просто подавать класс с соответствующим именованием полей.
Можно аннотациями задавать, что и как сериализовать/десериализовать.
Могут возникнуть проблемы с «плохим» файлом или с преобразованием структуры.
Разные фреймворки позволяют применять разные методы для обхождения разных
«подводных камней».
В основном они базируются на существующих DOM- (изредка Stream-) парсерах
Полезные ссылки
W3C XML Tutorial
JSON docs
Simple XML
Gson
Jackson
XmlPullParser

More Related Content

Viewers also liked

Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Noveo
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiDenis Vasilyev
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Noveo
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Denis Vasilyev
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - GraphicsNoveo
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Noveo
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)Антон Звонов
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Noveo
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Noveo
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Noveo
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)Noveo
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Noveo
 

Viewers also liked (20)

Lec 10
Lec 10Lec 10
Lec 10
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
Canvas
CanvasCanvas
Canvas
 
Thread
ThreadThread
Thread
 
Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++Seminar: Эффективное использование среды разработки и компилятора C++
Seminar: Эффективное использование среды разработки и компилятора C++
 
Android - 10 - Graphics
Android - 10 - GraphicsAndroid - 10 - Graphics
Android - 10 - Graphics
 
Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)Системы автоматизированной сборки (Lecture 05 – gradle)
Системы автоматизированной сборки (Lecture 05 – gradle)
 
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
DIOR-DNA, Anton Zvonov, Part 1, Activities (жизненный цикл)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)Введение в Android-разработку (Lecture 06 – basics)
Введение в Android-разработку (Lecture 06 – basics)
 
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
 
Database (Lecture 14 – database)
Database (Lecture 14 – database)Database (Lecture 14 – database)
Database (Lecture 14 – database)
 
Lec 9
Lec 9Lec 9
Lec 9
 
Lec 13
Lec 13Lec 13
Lec 13
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)Работа с графической подсистемой (Lecture 10 – Graphics)
Работа с графической подсистемой (Lecture 10 – Graphics)
 

Similar to XML, JSON (Lecture 11 – XML, JSON)

C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.Igor Shkulipa
 
Msu.Center.Lectures.J07 Advanced Xml
Msu.Center.Lectures.J07 Advanced XmlMsu.Center.Lectures.J07 Advanced Xml
Msu.Center.Lectures.J07 Advanced Xmlolegol
 
Design of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XMLDesign of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XMLAnton Moiseenko
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7Dima Dzuba
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Yandex Lego олег оболенский
Yandex Lego   олег оболенскийYandex Lego   олег оболенский
Yandex Lego олег оболенскийMedia Gorod
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Dmitriy Krukov
 
XForms новое поколение веб-форм
XForms новое поколение веб-формXForms новое поколение веб-форм
XForms новое поколение веб-формAlexander Anokhin
 
DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...
DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...
DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...it-people
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsSerge Shirokov
 
Элар Саперион. Единая корпоративная система управления электронными документа...
Элар Саперион. Единая корпоративная система управления электронными документа...Элар Саперион. Единая корпоративная система управления электронными документа...
Элар Саперион. Единая корпоративная система управления электронными документа...Корпорация ЭЛАР
 
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBFedor Malyshkin
 

Similar to XML, JSON (Lecture 11 – XML, JSON) (20)

C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
Msu.Center.Lectures.J07 Advanced Xml
Msu.Center.Lectures.J07 Advanced XmlMsu.Center.Lectures.J07 Advanced Xml
Msu.Center.Lectures.J07 Advanced Xml
 
Design of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XMLDesign of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XML
 
МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7МАИ, Сети ЭВМ, Лекция №7
МАИ, Сети ЭВМ, Лекция №7
 
XSLT - 1
XSLT - 1XSLT - 1
XSLT - 1
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Yandex Lego олег оболенский
Yandex Lego   олег оболенскийYandex Lego   олег оболенский
Yandex Lego олег оболенский
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Укрощение XML
Укрощение XMLУкрощение XML
Укрощение XML
 
XML
XMLXML
XML
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
 
XForms новое поколение веб-форм
XForms новое поколение веб-формXForms новое поколение веб-форм
XForms новое поколение веб-форм
 
Шаблонизация
ШаблонизацияШаблонизация
Шаблонизация
 
DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...
DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...
DUMP-2013 Наука и жизнь - Практические применения семантических вычислений - ...
 
XML Schema
XML SchemaXML Schema
XML Schema
 
Типичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.jsТипичный стек технологий для использования с Node.js
Типичный стек технологий для использования с Node.js
 
Элар Саперион. Единая корпоративная система управления электронными документа...
Элар Саперион. Единая корпоративная система управления электронными документа...Элар Саперион. Единая корпоративная система управления электронными документа...
Элар Саперион. Единая корпоративная система управления электронными документа...
 
L10N
L10NL10N
L10N
 
Apache fop
Apache fopApache fop
Apache fop
 
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
 

More from Noveo

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Noveo
 
Yii2
Yii2Yii2
Yii2Noveo
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизацияNoveo
 
Rest
RestRest
RestNoveo
 
PHP basic
PHP basicPHP basic
PHP basicNoveo
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP AdvancedNoveo
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQLNoveo
 
MySQL
MySQLMySQL
MySQLNoveo
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)Noveo
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Noveo
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Noveo
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Noveo
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Noveo
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QRNoveo
 
03 коллекции
03   коллекции03   коллекции
03 коллекцииNoveo
 

More from Noveo (19)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)Material Design (Lecture 15 – material design)
Material Design (Lecture 15 – material design)
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)Fragments (Lecture 09 – Fragments)
Fragments (Lecture 09 – Fragments)
 
Android - 16 - QR
Android - 16 - QRAndroid - 16 - QR
Android - 16 - QR
 
03 коллекции
03   коллекции03   коллекции
03 коллекции
 

XML, JSON (Lecture 11 – XML, JSON)

  • 2. eXtensible Markup Language 1 <?xml version="1.0" encoding="UTF-8"?> 2 <addresses> 3 <address> 4 <name>Pupkin</name> 5 <city>Novosibirsk</city> 6 <street>Demakova</street> 7 <phone type="mobile">+79139130000</phone> 8 <documents> 9 <document type="driving permit">9045798749</document> 10 </documents> 11 </address> 12 <address> 13 <name>Losev</name> 14 <phone type="home">+73834913400</phone> 15 <documents> 16 <document type="passport">3451231231</document> 17 <document type="driving permit">43568749</document> 18 </documents> 19 </address> 20 </addresses>
  • 3. XML namespace Позволяют относить элементы и атрибуты с одинаковыми именами к разным группам Namespace обязательно является URI Все элементы внутри пространства уникальны
  • 4. XML namespace 1 <root> 2 <h:table xmlns:h="http://www.w3.org/TR/html4/"> 3 <h:tr> 4 <h:td>Apples</h:td> 5 <h:td>Bananas</h:td> 6 </h:tr> 7 </h:table> 8 9 <f:table xmlns:f="http://www.w3schools.com/furniture"> 10 <f:name>African Coffee Table</f:name> 11 <f:width>80</f:width> 12 <f:length>120</f:length> 13 </f:table> 14 </root>
  • 5. Плюсы и минусы XML Поддерживает Unicode Имеет строго заданный синтаксис Стандартизирован W3C Платформонезависим Существует язык запросов к элементам документа XPath Существует язык преобразования XSLT (eXtensible Stylesheet Language Transformations), позволяющий трансформировать XML в HTML Избыточный синтаксис Существенно больший размер, нежели JSON, YAML Неоднозначность моделирования (атрибуты vs элементы) Нет поддержки типов данных
  • 6. JavaScript Object Notation Является подмножеством YAML Представлен как набор пар ключ-значение Поддерживает несколько типов данных: строка, литерал (true/false/null), число, объект({}), массив([])
  • 7. JavaScript Object Notation 1 {"addresses": [ 2 { 3 "name": "Pupkin", 4 "city": "Novosibirsk", 5 "street": "Demakova", 6 "phones": { 7 "mobile": "+79139130000" 8 }, 9 "documents": { 10 "driving permit": "123DP" 11 } 12 }, 13 { 14 "name": "Losev", 15 "phones": { 16 "home": "+73834913400" 17 }, 18 "documents": { 19 "passport": "3451231231", 20 "driving permit": "43568749" 21 } 22 } 23 ]}
  • 8. Плюсы и минусы JSON Поддерживает Unicode Лаконичен Нативная поддержка в JacaScript Удобочитаем Большинство сервисов используют именно для передачи данных JSON Менее распространен как формат хранения Выгрузка офисных форматов зачастую возможна только в XML Нет средств преобразования встроенных в формат Меньше стандартизированных средств (таких, как XPath, XML Schema)
  • 9. DOM, DOM-парсер Document Object Model — это не зависящий от платформы и языка интерфейс, позволяющий программам получить доступ к содержимому XML-документов, а также изменять содержимое, структуру и оформление таких документов. В памяти строится полное дерево, представляющее документ. Если документ «битый» — прочитать не удастся. Можно выполнять различные запросы по структуре (XPath) — //phone[@type=’mobile’]/text() выведет все номера мобильных из документа в начале презентации.
  • 10. SAX-парсер SAX (англ. «Simple API for XML») — способ последовательного чтения/записи XML-файлов (существуют аналоги и для JSON). Push-парсер — мы обрабатываем события вида «начало элемента», «начало атрибута». Требуют фиксированного количества памяти для своей работы. Не позволяют изменять содержимое документа. Валидируют документ по ходу чтения. Можно прочесть часть «испорченного» документа. Обычно быстрее, чем DOM-парсеры
  • 11. StAX-парсер StAX (англ. «Streaming API for XML») — способ последовательного чтения/записи XML-файлов (существуют аналоги и для JSON) Pull-парсер — мы не обрабатываем события, приходящие от парсера, а сами инициируем обработку, вытягивая токены. Нам предоставляется курсор, с которым мы можем перемещаться по токенам документа. В Android нет самого StAX, но есть аналог — XmlPullParser
  • 12. Фреймворки Позволяют делать парсинг автоматически, не задумываясь о деталях. Можно просто подавать класс с соответствующим именованием полей. Можно аннотациями задавать, что и как сериализовать/десериализовать. Могут возникнуть проблемы с «плохим» файлом или с преобразованием структуры. Разные фреймворки позволяют применять разные методы для обхождения разных «подводных камней». В основном они базируются на существующих DOM- (изредка Stream-) парсерах
  • 13. Полезные ссылки W3C XML Tutorial JSON docs Simple XML Gson Jackson XmlPullParser