Trabajo con XML en Kotlin: descripción general de bibliotecas y ejemplos prácticos
XML (eXtensible Markup Language) sigue siendo uno de los formatos clave para almacenar y transmitir datos estructurados. En el lenguaje Kotlin, que funciona sobre la JVM, están disponibles todas las bibliotecas de Java para trabajar con XML, así como varias soluciones nativas de Kotlin. En este artículo, consideraremos tres enfoques principales para trabajar con XML: SimpleXML (análisis con anotaciones), XStream (serialización rápida) y kotlinx.serialization (biblioteca nativa de Kotlin).
1. SimpleXML — análisis de XML con anotaciones
SimpleXML es una biblioteca popular para Java/Kotlin que permite convertir XML a objetos y viceversa mediante anotaciones. Es ideal cuando la estructura del XML se conoce de antemano.
Inclusión (Gradle):
dependencies { implementation("org.simpleframework:simple-xml:2.7.1")}Ejemplo: análisis de un feed RSS
Supongamos que tenemos un XML con noticias:
<rss version="2.0"> <channel> <item> <title>Noticia 1</title> <link>https://example.com/1</link> </item> <item> <title>Noticia 2</title> <link>https://example.com/2</link> </item> </channel></rss>Creemos modelos de datos con anotaciones:
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 = "")Análisis del 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("Error de análisis: ${e.message}") null }}
// Uso:val xml = "<rss version=\\"2.0\\">...</rss>" // tu XMLval rss = parseRss(xml)rss?.channel?.items?.forEach { item -> println("${item.title}: ${item.link}")}Ventajas de SimpleXML: simplicidad, soporte para herencia, convertidores integrados para fechas y números.
2. XStream — serialización rápida de objetos
XStream es otra biblioteca potente que puede serializar objetos a XML sin anotaciones. Utiliza reflexión y es adecuada para prototipado.
Inclusión:
dependencies { implementation("com.thoughtworks.xstream:xstream:1.4.20")}Ejemplo: serialización y deserialización
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)
// Serialización val person = Person("Iván", 30) val xml = xstream.toXML(person) println(xml) // Salida: <person><name>Iván</name><age>30</age></person>
// Deserialización val restored = xstream.fromXML(xml) as Person println("Nombre: ${restored.name}, Edad: ${restored.age}")}Características de XStream:
- No requiere anotaciones — funciona "de fábrica"
- Soporta colecciones, arrays, objetos anidados
- Se pueden configurar alias para clases y campos
- Es
También en la biblioteca
MetricsKit — monitoreo de aplicaciones Swift (iOS/macOS)
calamine en Rust: guía completa con ejemplos prácticos
Las mejores bibliotecas de logging para Go (Golang): revisión y comparativa
Monitoreo de Node.js: herramientas y bibliotecas para observabilidad