XML (eXtensible Markup Language) — это текстовый формат для хранения и передачи структурированных данных с использованием пользовательских тегов. Он широко применяется в конфигурационных файлах, веб-сервисах и Android-разработке. По данным консорциума W3C, спецификация XML остаётся стабильным стандартом с 2008 года. XML обеспечивает строгую структуру данных с возможностью валидации через схемы.
Главное
XML — это язык разметки, который определяет набор правил для кодирования документов в формате, читаемом как человеком, так и машиной. В отличие от HTML, XML не имеет фиксированного набора тегов — разработчик создаёт собственные теги, соответствующие структуре данных.
XML был разработан консорциумом W3C в 1996 году как упрощённый подмножество SGML (Standard Generalized Markup Language). Основная цель XML — разделение содержания и представления данных. В отличие от HTML, который описывает внешний вид, XML описывает структуру и смысл данных.
Ключевое свойство XML — расширяемость. Если в проекте появляются новые типы данных, разработчик просто добавляет новые теги без изменения существующей структуры. Это делает XML удобным для долгосрочного хранения данных и обмена между разными системами.
Синтаксис XML строже, чем у HTML. Каждый открывающий тег должен иметь соответствующий закрывающий, атрибуты заключаются в кавычки, имена тегов чувствительны к регистру. Документ должен иметь ровно один корневой элемент, содержащий все остальные.
XML-документ может начинаться с декларации, указывающей версию XML и кодировку. Затем следует корневой элемент, внутри которого могут быть вложенные элементы, атрибуты, текстовое содержимое и комментарии. Пустые элементы записываются как
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk001">
<title>XML Developer Guide</title>
<author>John Smith</author>
<price currency="USD">29.99</price>
<published>2026-03-15</published>
</book>
<book id="bk002">
<title>Advanced XML Schemas</title>
<author>Jane Doe</author>
<price currency="USD">49.99</price>
</book>
</catalog>
Well-formed XML должен соблюдать базовые правила: закрывающие теги обязательны для каждого открывающего, вложенность строгая (пересечение тегов запрещено), значения атрибутов всегда в кавычках. Нарушение любого правила делает документ некорректным и не подлежит парсингу.
Пространства имён XML (XML Namespaces) решают проблему конфликта имён, когда в одном документе используются элементы из разных словарей. Пространство имён задаётся атрибутом xmlns с URI, который однозначно идентифицирует словарь.
XML Schema (XSD) — это язык описания структуры XML-документа. XSD определяет, какие элементы и атрибуты допустимы, их типы данных, обязательность и ограничения. Схемы позволяют автоматически валидировать документ перед обработкой, что критически важно для интеграционных решений.
| Технология | Назначение | Пример |
|---|---|---|
| DTD | Базовая валидация структуры | Старая, меньше возможностей |
| XSD | Строгая типизация и валидация | Стандарт для индустрии |
| RELAX NG | Компактная альтернатива XSD | Проще и читаемее XSD |
| XSLT | Трансформация XML в другие форматы | XML в HTML, PDF, CSV |
| XPath | Навигация и выборка узлов | Запросы к XML-дереву |
XML играет ключевую роль в Android-разработке. Операционная система Android использует XML для описания пользовательского интерфейса (layout-файлы), конфигурации приложения (AndroidManifest.xml), ресурсов (строки, цвета, темы) и векторной графики (VectorDrawable). На iOS XML применяется реже, в основном для Storyboard и конфигурационных plist-файлов.
В Android каждый экран приложения описывается XML-файлом с иерархией View-компонентов: ConstraintLayout, LinearLayout, TextView, Button. Этот подход разделяет логику приложения и представление, упрощая поддержку и адаптацию под разные экраны. Ресурсные XML-файлы позволяют локализовать приложение без изменения кода.
Типичный layout-файл содержит корневой ConstraintLayout с вложенными элементами, каждый из которых имеет атрибуты расположения, размера и стиля. Android компилирует XML в бинарный формат AXML для оптимизации производительности при запуске.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/welcome"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/click"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Парсинг XML на мобильных платформах выполняется двумя основными подходами: DOM (Document Object Model) загружает весь документ в память как дерево, SAX (Simple API for XML) читает документ потоково, вызывая обработчики событий. DOM удобен для небольших документов, SAX — для больших файлов с ограничениями по памяти.
На Android доступны встроенные парсеры: XmlPullParser для потокового разбора и DocumentBuilder для DOM-подхода. На iOS используется Foundation XMLParser с делегатным протоколом. Для сериализации объектов в XML часто применяются библиотеки вроде SimpleXML на PHP или Jackson XML на Java.
В Android рекомендуется использовать XmlPullParser для эффективного разбора XML. Парсер работает в событийном режиме: вызывает next() для перемещения к следующему элементу и возвращает тип события (START_TAG, TEXT, END_TAG). Это позволяет обрабатывать документы любого размера с минимальным потреблением памяти.
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserException
import java.io.IOException
fun parseCatalog(parser: XmlPullParser): List<Book> {
val books = mutableListOf<Book>()
var eventType = parser.getEventType()
var currentBook: Book? = null
while (eventType != XmlPullParser.END_DOCUMENT) {
when (eventType) {
XmlPullParser.START_TAG -> {
when (parser.getName()) {
"book" -> currentBook = Book()
"title" -> parser.next()
"author" -> parser.next()
}
}
XmlPullParser.TEXT -> {
currentBook?.apply {
title = parser.getText() ?: ""
}
}
XmlPullParser.END_TAG -> {
if (parser.getName() == "book") {
currentBook?.let { books.add(it) }
}
}
}
eventType = parser.next()
}
return books
}
Примеры использования XML показывают его роль в реальных проектах. Помимо Android-разработки, XML применяется для конфигурации сборки, описания данных и документооборота. Понимание синтаксиса XML необходимо для работы с Maven, SOAP-сервисами и многими enterprise-инструментами.
Файл pom.xml описывает проект Maven: зависимости, плагины, версии и профили сборки. Каждая зависимость задаётся тегами groupId, artifactId и version. Maven автоматически загружает указанные библиотеки из репозиториев.
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
</project>
Выбор между XML и JSON зависит от конкретных требований проекта. JSON подходит для REST API, мобильных приложений и конфигураций, где важны компактность и скорость. XML незаменим в Enterprise-системах, документообороте и Android-разработке, где нужны строгая валидация, пространства имён и трансформация данных.
XML выигрывает в сценариях с долгосрочным хранением документов. Благодаря XSD-схемам XML-документы можно валидировать автоматически, что критично для медицинских, финансовых и юридических систем. XSLT-преобразования позволяют генерировать HTML, PDF и другие форматы из одного XML-источника, что упрощает документооборот.
JSON, в свою очередь, стал стандартом для веб-API и мобильных приложений. Простота интеграции с JavaScript, меньший размер и высокая скорость парсинга делают JSON предпочтительным выбором для REST API, WebSocket-сообщений и конфигурационных файлов. Для большинства новых проектов рекомендуется начинать с JSON и переходить на XML только при появлении специфических требований.
Часто задаваемые вопросы
XML описывает структуру и содержание данных, HTML — внешний вид и представление. XML позволяет создавать любые теги, HTML имеет фиксированный набор. XML строже в синтаксисе: все теги обязаны закрываться, HTML допускает незакрытые теги. XML — для данных, HTML — для отображения.
XSD (XML Schema Definition) — это язык описания структуры XML-документа. XSD определяет, какие элементы и атрибуты разрешены, их типы данных, обязательность и ограничения. Схема позволяет автоматически валидировать XML-документ до его обработки, предотвращая ошибки и гарантируя целостность данных.
На Android для парсинга XML используйте XmlPullParser — встроенный потоковый парсер. Он работает событийно: обрабатывает START_TAG, TEXT и END_TAG в цикле, управляя памятью эффективно. Для небольших документов подойдёт DOM-парсер через DocumentBuilderFactory, который загружает весь документ в память как дерево узлов.
DTD (Document Type Definition) — старый механизм валидации с ограниченными возможностями: не поддерживает типы данных (всё — строки) и пространства имён. XSD — современная замена с поддержкой типов данных (числа, даты, перечисления), пространств имён и расширяемости. XSD сама является XML-документом, DTD использует свой синтаксис.
Пространства имён предотвращают конфликты имён, когда XML-документ объединяет элементы из разных источников. Например, в Android layout тег View может быть как из android.view, так и из библиотеки. Атрибут xmlns с URI однозначно идентифицирует источник каждого элемента и атрибута.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также