Trabajo con XML en Kotlin: bibliotecas, análisis y creación de documentos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con XML en Kotlin: bibliotecas, análisis y creación de documentos



XML (eXtensible Markup Language) sigue siendo un formato popular para almacenar y transmitir datos estructurados, especialmente en sistemas heredados, archivos de configuración y servicios web. Kotlin, al ser totalmente compatible con Java, proporciona acceso a todas las bibliotecas clásicas de Java para trabajar con XML, además de tener soluciones nativas. En este artículo, analizaremos los enfoques principales: análisis, creación y serialización de documentos XML en Kotlin.



1. Herramientas integradas de JDK: DOM, SAX, StAX

Gracias a la total interoperabilidad con Java, en Kotlin se pueden usar directamente las API estándar:

  • DOM (Document Object Model) — carga todo el documento en memoria, útil para modificaciones.
  • SAX (Simple API for XML) — analizador orientado a eventos, consumo mínimo de memoria.
  • StAX (Streaming API for XML) — analizador de flujo con enfoque de cursor o eventos.


Ejemplo de análisis XML con 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. Biblioteca Simple XML (org.simpleframework.xml)

Simple XML es una biblioteca popular para la serialización/deserialización de objetos en XML. Utiliza anotaciones y no requiere archivos de configuración. Es ideal para API REST con respuestas XML.



Configuración (Gradle):

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


Ejemplo de modelo y deserialización:

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 con formato XML

Para proyectos multiplataforma (KMP) es conveniente usar kotlinx.serialization con un formato XML personalizado. Existen adaptadores de terceros, como kotlinx-serialization-xml (de la comunidad).



Ejemplo con la biblioteca nl.adaptivity.xmlutil (compatible con 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 y XSLT en Kotlin

Para la selección de datos según criterios complejos, use XPath. En Kotlin, esto se hace a través de las clases estándar de Java javax.xml.xpath

Recommendations