Работа с XML в Kotlin: библиотеки и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с XML в Kotlin: обзор библиотек и практические примеры

XML (eXtensible Markup Language) остаётся одним из ключевых форматов для хранения и передачи структурированных данных. В языке Kotlin, который работает поверх JVM, доступны все Java-библиотеки для работы с XML, а также несколько нативных Kotlin-решений. В этой статье рассмотрим три основных подхода к работе с XML: SimpleXML (аннотационный парсинг), XStream (быстрая сериализация) и kotlinx.serialization (нативная Kotlin-библиотека).

1. SimpleXML — аннотационный парсинг XML

SimpleXML — популярная библиотека для Java/Kotlin, которая позволяет преобразовывать XML в объекты и обратно с помощью аннотаций. Она идеально подходит, когда структура XML известна заранее.

Подключение (Gradle):

dependencies {
    implementation("org.simpleframework:simple-xml:2.7.1")
}

Пример: парсинг RSS-ленты

Допустим, у нас есть XML с новостями:

<rss version="2.0">
    <channel>
        <item>
            <title>Новость 1</title>
            <link>https://example.com/1</link>
        </item>
        <item>
            <title>Новость 2</title>
            <link>https://example.com/2</link>
        </item>
    </channel>
</rss>

Создадим модели данных с аннотациями:

import org.simpleframework.xml.*

@Root(name = "rss", strict = false)
data class Rss(
    @field:Element(name = "channel")
    var channel: Channel? = null
)

@Root(name = "channel", strict = false)
data class Channel(
    @field:ElementList(inline = true, entry = "item")
    var items: List<Item> = emptyList()
)

@Root(name = "item", strict = false)
data class Item(
    @field:Element(name = "title")
    var title: String = "",

    @field:Element(name = "link")
    var link: String = ""
)

Парсинг XML:

import org.simpleframework.xml.core.Persister

fun parseRss(xmlString: String): Rss? {
    return try {
        val serializer = Persister()
        serializer.read(Rss::class.java, xmlString)
    } catch (e: Exception) {
        println("Ошибка парсинга: ${e.message}")
        null
    }
}

// Использование:
val xml = "<rss version=\"2.0\">...</rss>" // ваш XML
val rss = parseRss(xml)
rss?.channel?.items?.forEach { item ->
    println("${item.title}: ${item.link}")
}

Плюсы SimpleXML: простота, поддержка наследования, встроенные конвертеры для дат и чисел.

2. XStream — быстрая сериализация объектов

XStream — ещё одна мощная библиотека, которая умеет сериализовать объекты в XML без аннотаций. Она использует рефлексию и хорошо подходит для прототипирования.

Подключение:

dependencies {
    implementation("com.thoughtworks.xstream:xstream:1.4.20")
}

Пример: сериализация и десериализация

import com.thoughtworks.xstream.XStream

data class Person(val name: String, val age: Int)

fun main() {
    val xstream = XStream()
    xstream.alias("person", Person::class.java)

    // Сериализация
    val person = Person("Иван", 30)
    val xml = xstream.toXML(person)
    println(xml)
    // Вывод: <person><name>Иван</name><age>30</age></person>

    // Десериализация
    val restored = xstream.fromXML(xml) as Person
    println("Имя: ${restored.name}, Возраст: ${restored.age}")
}

Особенности XStream:

  • Не требует аннотаций — работает "из коробки"
  • Поддерживает коллекции, массивы, вложенные объекты
  • Можно настраивать псевдонимы для классов и полей
  • Есть встроенная поддержка JSON (через Jettison)

3. kotlinx.serialization — нативный подход Kotlin

kotlinx.serialization — официальная библиотека Kotlin для сериализации. Изначально создавалась для JSON, но имеет модуль для XML (экспериментальный).

Подключение:


                
    
    

Рекомендаций