Travailler avec XML en Kotlin : bibliothèques, analyse et création de documents
XML (eXtensible Markup Language) reste un format très demandé pour le stockage et la transmission de données structurées, en particulier dans les systèmes legacy, les fichiers de configuration et les services web. Kotlin, étant entièrement compatible avec Java, donne accès à toutes les bibliothèques Java classiques pour travailler avec XML, et propose également des solutions natives. Dans cet article, nous aborderons les approches principales : l'analyse, la création et la sérialisation de documents XML en Kotlin.
1. Outils intégrés du JDK : DOM, SAX, StAX
Grâce à une interopérabilité totale avec Java, il est possible d'utiliser directement les API standard en Kotlin :
- DOM (Document Object Model) — charge l'intégralité du document en mémoire, pratique pour les modifications.
- SAX (Simple API for XML) — analyseur orienté événements, consommation mémoire minimale.
- StAX (Streaming API for XML) — analyseur en flux avec une approche par curseur ou par événements.
Exemple d'analyse XML avec DOM en Kotlin :
import javax.xml.parsers.DocumentBuilderFactoryimport org.w3c.dom.Element
fun parseXmlWithDom(xmlString: String) { val factory = DocumentBuilderFactory.newInstance() val builder = factory.newDocumentBuilder() val document = builder.parse(xmlString.byteInputStream()) val root = document.documentElement
val items = root.getElementsByTagName("item") for (i in 0 until items.length) { val item = items.item(i) as Element val name = item.getElementsByTagName("name").item(0).textContent val price = item.getElementsByTagName("price").item(0).textContent println("Item: $name, Price: $price") }}2. Bibliothèque Simple XML (org.simpleframework.xml)
Simple XML est une bibliothèque populaire pour la sérialisation/désérialisation d'objets en XML. Elle utilise des annotations et ne nécessite pas de fichiers de configuration. Idéale pour les API REST avec réponses XML.
Ajout de la dépendance (Gradle) :
implementation("org.simpleframework:simple-xml:2.7.1")Exemple de modèle et de désérialisation :
import org.simpleframework.xml.*import org.simpleframework.xml.core.Persister
@Root(name = "catalog")data class Catalog( @field:ElementList(inline = true) var books: List<Book> = emptyList())
@Root(name = "book")data class Book( @field:Element(name = "title") var title: String = "", @field:Element(name = "author") var author: String = "", @field:Attribute(name = "id") var id: Int = 0)
fun deserializeXml(xml: String): Catalog { val serializer = Persister() return serializer.read(Catalog::class.java, xml)}3. kotlinx.serialization avec le format XML
Pour les projets multiplateformes (KMP), il est pratique d'utiliser kotlinx.serialization avec un format XML personnalisé. Il existe des adaptateurs tiers, par exemple kotlinx-serialization-xml (de la communauté).
Exemple avec la bibliothèque nl.adaptivity.xmlutil (prend en charge JVM, JS, Native) :
import nl.adaptivity.xmlutil.serialization.XMLimport kotlinx.serialization.*
@Serializabledata class Person( val name: String, @XmlSerialName("age") val years: Int)
fun main() { val xml = XML { indent = 4 xmlDeclMode = XmlDeclMode.Auto } val person = Person("Alice", 30) val result = xml.encodeToString(Person.serializer(), person) println(result) // <Person> // <name>Alice</name> // <age>30</age> // </Person>}4. XPath et XSLT en Kotlin
Pour la sélection de données selon des critères complexes, utilisez XPath. En Kotlin, cela se fait via les classes Java standard javax.xml.xpath
Aussi dans la bibliothèque
Event Bus et le pattern Observer en TypeScript : Implémentation et exemples
Event Bus et le pattern Observer en Go (Golang) : implémentation et exemples
Envoi de SMS en JavaScript (Node.js) : API, bibliothèques et exemples de code
Traitement JSON en Java : bibliothèques et exemples pratiques
Surveillance des applications Rust : la bibliothèque `tracing`
Recommendations