XML: какво е, структура на документа и принцип на работа

Автор: IT Sectr Публикувано: 2026-03-08 Време за четене: 8 мин

XML (eXtensible Markup Language) е текстов формат за съхранение и предаване на структурирани данни с помощта на потребителски тагове. Той се използва широко в конфигурационни файлове, уеб услуги и Android разработка. Според консорциума W3C, XML спецификацията остава стабилен стандарт от 2008 г. XML осигурява строга структура на данните с възможност за валидация чрез схеми.

Основни точки

  • XML — разширим език за маркиране с потребителски тагове за структурирани данни
  • Строга структура — задължителни затварящи тагове, коренов елемент и валидация чрез XSD
  • Именни пространства — механизъм за избягване на конфликти на имена в един документ
  • XSLT — трансформация на XML в други формати: HTML, PDF, CSV
  • Android разработка — XML се използва за оформления, манифест и ресурси

Какво е XML?

XML е език за маркиране, който дефинира набор от правила за кодиране на документи във формат, четим както от човек, така и от машина. За разлика от HTML, XML няма фиксиран набор от тагове — разработчикът създава свои собствени тагове, съответстващи на структурата на данните.

XML е разработен от консорциума W3C през 1996 г. като опростено подмножество на SGML (Standard Generalized Markup Language). Основната цел на XML е разделяне на съдържанието и представянето на данните. За разлика от HTML, който описва външния вид, XML описва структурата и значението на данните.

Ключовото свойство на XML е разширимостта. Ако в проекта се появят нови типове данни, разработчикът просто добавя нови тагове без да променя съществуващата структура. Това прави XML удобен за дългосрочно съхранение на данни и обмен между различни системи.

Основни области на приложение на XML

  • Android разработка — файлове за оформление, манифест, ресурси (strings, colors, themes)
  • Конфигурация — Maven POM, Ant build, уеб конфигурации (web.xml)
  • Уеб услуги — SOAP, XML-RPC, RSS/Atom потоци
  • Документооборот — SVG, DocBook, Office Open XML
  • Бази данни — SQL Server (XML type), Oracle, PostgreSQL

Синтаксис и структура на XML

Синтаксисът на XML е по-строг от този на HTML. Всеки отварящ таг трябва да има съответен затварящ таг, атрибутите се поставят в кавички, имената на таговете са чувствителни към главни и малки букви. Документът трябва да има точно един коренов елемент, който съдържа всички останали.

XML документът може да започва с декларация, посочваща версията на 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>

Правила за добре оформен XML

Well-formed XML трябва да спазва основни правила: затварящите тагове са задължителни за всеки отварящ таг, влагането е строго (пресичането на тагове е забранено), стойностите на атрибутите винаги са в кавички. Нарушаването на което и да е правило прави документа невалиден и не може да бъде парсван.

  1. Един коренов елемент — документът има точно един корен
  2. Правилно влагане — таговете не трябва да се пресичат
  3. Затварящи тагове — задължителни за всички елементи, освен самозатварящите се
  4. Чувствителност към главни и малки букви — <Book> и <book> са различни елементи
  5. Кавички в атрибутите — стойностите на атрибутите в двойни или единични кавички

Именни пространства и схеми на 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 в мобилната разработка

XML играе ключова роля в Android разработката. Операционната система Android използва XML за описание на потребителския интерфейс (файлове за оформление), конфигурация на приложението (AndroidManifest.xml), ресурси (низове, цветове, теми) и векторна графика (VectorDrawable). На iOS XML се използва по-рядко, основно за Storyboard и конфигурационни plist файлове.

В Android всеки екран на приложението се описва от XML файл с йерархия от View компоненти: ConstraintLayout, LinearLayout, TextView, Button. Този подход разделя логиката на приложението от представянето, улеснявайки поддръжката и адаптирането към различни екрани. Ресурсните XML файлове позволяват локализация на приложението без промяна на кода.

Пример за Android оформление

Типичният файл за оформление съдържа коренов ConstraintLayout с вложени елементи, всеки от които има атрибути за позиция, размер и стил. Android компилира XML в двоичен формат AXML за оптимизация на производителността при стартиране.

xml
<?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 на мобилни платформи

Парсването на 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.

Парсване на XML на Android (Kotlin)

В Android се препоръчва използването на XmlPullParser за ефективно парсване на XML. Парсерът работи в събитиен режим: извиква next() за придвижване до следващия елемент и връща типа на събитието (START_TAG, TEXT, END_TAG). Това позволява обработка на документи с произволен размер с минимална консумация на памет.

kotlin
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 в приложения

Примери за използване на XML показват ролята му в реални проекти. Освен Android разработка, XML се използва за конфигурация на компилация, описание на данни и документооборот. Познаването на синтаксиса на XML е необходимо за работа с Maven, SOAP услуги и много enterprise инструменти.

Конфигурация на Maven (POM)

Файлът pom.xml описва Maven проекта: зависимости, добавки, версии и профили на компилация. Всяка зависимост се задава с тагове groupId, artifactId и version. Maven автоматично зарежда посочените библиотеки от хранилища.

xml
<?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: кога какво да изберем

Изборът между 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 допуска незатворени тагове. XML — за данни, HTML — за показване.

Какво е XSD и за какво служи?

XSD (XML Schema Definition) е език за описание на структурата на XML документ. XSD определя кои елементи и атрибути са разрешени, техните типове данни, задължителност и ограничения. Схемата позволява автоматична валидация на XML документа преди обработка, предотвратявайки грешки и гарантирайки цялост на данните.

Как да парсваме XML на Android?

На Android за парсване на XML използвайте XmlPullParser — вграден потоков парсер. Той работи в събитиен режим: обработва START_TAG, TEXT и END_TAG в цикъл, управлявайки паметта ефективно. За малки документи е подходящ DOM парсерът чрез DocumentBuilderFactory, който зарежда целия документ в паметта като дърво от възли.

Каква е разликата между DTD и XSD?

DTD (Document Type Definition) е стар механизъм за валидация с ограничени възможности: не поддържа типове данни (всичко са низове) и именни пространства. XSD е модерен заместител с поддръжка на типове данни (числа, дати, изброявания), именни пространства и разширяемост. XSD самият е XML документ, DTD използва свой собствен синтаксис.

Защо са необходими именни пространства в XML?

Именните пространства предотвратяват конфликти на имена, когато XML документ комбинира елементи от различни източници. Например, в Android оформление, тагът View може да бъде както от android.view, така и от библиотека. Атрибутът xmlns с URI уникално идентифицира източника на всеки елемент и атрибут.

Резюме

  • XML — разширим език за маркиране с потребителски тагове за структурирани данни
  • Строг синтаксис — задължителни затварящи тагове, коренов елемент, чувствителност към главни и малки букви
  • Именни пространства и XSD схеми осигуряват валидация и предотвратяват конфликти на имена
  • Android използва XML за интерфейси, ресурси и конфигурация на приложението
  • Парсване се извършва чрез XmlPullParser (поточно) или DOM (в паметта)
  • XSLT позволява трансформация на XML в HTML, PDF и други формати
  • По-малка популярност в REST API отстъпва на JSON, но XML е незаменим в Enterprise и Android

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също