JavaRush /Курсы /Java Collections /XML, Сериализация в XML

XML, Сериализация в XML

Java Collections
3 уровень , 6 лекция
Открыта

— Как делишки?

— Отлично. Не жалуюсь. Сегодня Билаабо рассказал про JavaScript. Не все, конечно, но тоже немало. Я конечно еще на JS ничего не писал, но думаю, что это несложно.

А Элли рассказала про сериализацию в JSON. И ты рассказывал о Jackson framework и как настраивать «полиморфную десериализацию» с помощью аннотаций.

— Нифига себе, ты умный теперь, Амиго! Серьезный мужик!

— А то!

— Ладно. Давай к работе. Сегодня новая и интересная тема – XML.

XML, Сериализация в XML - 1

XML – это стандарт представления данных, которые легко могут быть прочитаны человеком, и еще легче – программой. Пример xml-файла:

XML
<data>
<owner first="Nikolay" last="Ivanovich">
<address>Moscow</address>
</owner>
<cat name="Murka" age="15"/>
</data>

Основа XML – это теги. Тег – это слово в треугольных скобках (знаки меньше и больше). Теги бывают открывающие и закрывающие. Одному открывающему всего соответствует один закрывающий тег. Открывающие теги могут иметь атрибуты.

В тег можно складывать другие теги, получая, таким образом, дерево элементов. Тег верхнего уровня называют корнем (root): у него есть дочерние теги, у них свои дочерние теги.

Примеры:

Тег Описание
<data> Открывающий тег «data»
</data> Закрывающий тег «data»
<cat name="Murka" age="15"> Тег с атрибутами. Значения атрибутов берутся в кавычки
<data>
<owner>
<cat name="Murka"/>
</owner>
</data>
Вложенные теги.
<cat name="Murka" age="15" /> Автозакрывающийся тег.
Такому тегу не нужен закрывающий.
Не может содержать дочерние теги.
<info>
Тут может быть любая информация
</info>
Тег может содержать текстовые данные
<info>
Тут может
<data xxx="yyy">
</data>
быть любая
<data 2xxx="yyy"/>
информация
</info>
Тег может содержать текстовые данные и другие теги вперемешку.

— Выглядит несложно. А какие теги бывают?

— Любые. Никаких зарезервированных тегов нет. XML – это язык, для описания любых данных. Люди сами придумывают теги для своих нужд и договариваются, как их использовать.

Фактически, XML – это способ записать данные в виде дерева элементов, понятный компьютеру.

— Вроде ясно. Кстати, у меня вопрос.

Вот JSON используется для передачи данных с браузера на сервер, а где используется XML?

— Да там же, где и JSON: для хранения и передачи данных.

Ладно, продолжим.

Представь, что есть один общий XML-файл, который хранит данные программы, которую пишут двадцать человек. Тогда каждый из них придумывает теги для себя и очень скоро они начинают мешать друг другу.

Чтобы гарантировать уникальность тегов, им были придуманы префиксы. Выглядит это так:

Теги Описание
<animal:cat> Тег cat с префиксом animal
<animal:cat>
</animal:cat>
<zoo:cat>
</zoo:cat>
Два тега cat с разными префиксами.
<animal:cat zoo:name="MX"> Тег cat с префиксом animal, атрибут name с префиксом zoo.

Префиксы еще называют namespace – пространство имен. Тогда последнее предложение в таблице будет звучать так «Тег cat из пространства имен animal с атрибутом name из пространства имен zoo».

Кстати, помнишь в Java у класса есть короткое имя, а есть длинное уникальное имя, в которое входит название пакета, его еще указывают при импорте?

— Ага.

— Так вот, у префиксов тоже есть уникальное длинное имя и его тоже указывают при импорте:

Пример
<data xmlns:soap="http://cxf.apache.org/bindings/soap">
<soap:item>
<soap:info/>
</soap:item>
</data>

«xmlns:soap» значит «XMLnamespace SOAP»

Более того, если есть теги без префикса, можно задать и их уникальное имя:

Пример
<data xmlns="http://www.springframework.org/schema/beans"
xmlns:soap="http://cxf.apache.org/bindings/soap"
xmlns:task="http://www.springframework.org/schema/task">
<soap:item>
<soap:info/>
<task:info/>
</soap:item>
</data>

«xmlns=…» задает namespace для пустого префикса – т.е. для тегов без префикса, таких как data.

В документе может быть сколько угодно namespace, но у каждого должно быть свое уникальное имя.

— Ясно. А почему такие странные «уникальные имена» у этих namespace?

— Обычно там указывают URL, по которому находится документ, который описывает этот namespace и/или его XML-теги.

— Не так уж и мало на меня сегодня вылили информации. Что еще?

— Еще немного осталось.

Во-первых, у XML есть заголовок – специальная строка, которая описывает версию этого XML и кодировку файла.

Выглядит она обычно так:

Пример
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:soap="http://cxf.apache.org/bindings/soap">
<soap:item>
<soap:info/>
</soap:item>
</data>

Еще в XML можно вставлять комментарии. Для начала комментария используют «<!—», а для конца «—>».

Пример
<?xml version="1.0" encoding="UTF-8"?>
<data xmlns:soap="http://cxf.apache.org/bindings/soap">
<soap:item>
<!-- <soap:info/> -->
</soap:item>
<!-- это тоже комментарий -->
</data>

— Пока понятно.

— Из-за того, что в XML используются символы « < > “ &», их нельзя использовать в других местах. Для их описания используют так называемые «эскейп последовательности» — набор символов для представления других символов/символа. Вот список некоторых из них:

Escape-последовательность Символ, который она заменяет
&amp; &
&quot; "
&lt; <
&gt; >
&apos;

А вот пример кода, который хранится в XML:

Java-код Он же, в XML
if (a<b)
System.out.println("a is minimum");
<code>
if (a &lt; b)
 System.out.println(&quot;a is minimum&quot;);
</code>

— М-да. Выглядит не очень красиво.

— А ты помнишь, в Java тоже экранируются некоторые символы — например «\». И тоже для его написания в строке приходится писать его дважды. Так что это часто встречаемое явление.

— Ок.

— У меня на сегодня все.

— Ура. Наконец-то я отдохну.

Комментарии (65)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
{Java_Shark} Уровень 36
30 января 2025
++
Raf Java Master Уровень 31
28 ноября 2023
Зачем это нужно, когда есть json?
Gans Electro Уровень 2
2 декабря 2023
Xml более гибкий и общий инструмент. Даже можно сказать "зачем нужен json если есть xml". Оно чаще используется чем json. Например выводы запроса из БД создают в виде xml. Его можно потом превратить в таблицу. А так же он удобно и красиво выводиться в браузерах и можно быстро исправлять данные и т.д.
Андрей Уровень 51
25 апреля 2024
также в хмл можно указывать специальные схемы, которые задают правила формата, т.е. какие теги где допустимы, вложенность и т.п.
Андрей Уровень 42
17 июня 2023
адский скрип от продвижения по этим коллекциям, которые вовсе не коллекции. на каждую лекцию, чтоб ее разобрать, тратится невероятно много времени. статью прочел за 5 мин. потом еще несколько часов видео и доп статей по теме. уже забыл с чего начиналось.
Василий Чи Уровень 51
15 января 2023
4 декабря 2021
Alukard Уровень 37 Expert
31 октября 2022
Ля, такой он нудный.
PaiMei in J# Уровень 35
25 октября 2021
Оказывается вот этот знак '&' называется амперсанд, для меня всегда он был and - загагулиной😬
LuneFox Уровень 41 Expert
3 января 2022
Сделай локализованную версию XML и введи последовательность &заг; для загогулины :)
Ilia lenskii Уровень 32
11 сентября 2022
Если ты дед ставь лайк
23 марта 2021
Подскажите пожалуйста с каким jdk работаете? Новую версию установили уже? Или работать на 15ой?
Darth Nihilus Уровень 35
20 мая 2021
12)
Anonymous #2489173 Уровень 35
20 сентября 2021
15? 12? что??? разве тут до сих пор не 7 или 8?
Dregid Уровень 40
6 ноября 2022
17 передает привет. Хотя можно уже переходить на 19
runk out Уровень 51
10 декабря 2022
Тут вопрос скорее не в актуальности версии JDK в мире, а версия JDK на которой выполнен курс.
Dregid Уровень 40
11 декабря 2022
Выполнен то на 8. Из за этого большинство новых методов утильных классов валидатор не принимает. Но что поделать
Anemon Уровень 51 Expert
27 февраля 2025
21 и 23 уже..)
alex_us Уровень 20
11 января 2021
https://javarush.com/groups/posts/620-konkurs-osnovih-xml-dlja-java-programmista---chastjh-1-iz-3 Почитайте эту ссылку и далее .Хорошо объясняются общие принципы. Что как и зачем
barracuda Уровень 41 Expert
3 февраля 2021
погрузился и охренел...
Илья Уровень 41
6 февраля 2021
как-то прочитал эту статью с пару недель назад, так после нее эта лекция зашла на раз два
Любовь Уровень 33
27 апреля 2021
спасибо, очень полезные статьи, все разложено по полочкам
Антон Уровень 35
1 декабря 2020
А как же хранение символов юникода?
Андрей Уровень 41
29 ноября 2020
JSON явно проще. Тут груда какого-то хлама с ссылками куда-то зачем-то. Самое интересно - так и не ясно, зачем нужен XML, когда есть JSON? (хотя XML появился раньше, но здесь выдано наоборот)
MKIV Уровень 41
21 декабря 2020
"зачем нужен XML, когда есть JSON?" - я вижу преимущество XML в том, что он обязан подчиняться схеме (файл должен быть валидным). Структура XML чаще читается легче чем json.