Trabalho com XML em Kotlin: bibliotecas, parsing e criação de documentos
XML (eXtensible Markup Language) continua sendo um formato popular para armazenar e transmitir dados estruturados, especialmente em sistemas legados, arquivos de configuração e serviços web. Kotlin, sendo totalmente compatível com Java, fornece acesso a todas as bibliotecas Java clássicas para trabalhar com XML, além de ter soluções nativas. Neste artigo, abordaremos as principais abordagens: parsing, criação e serialização de documentos XML em Kotlin.
1. Recursos integrados do JDK: DOM, SAX, StAX
Graças à total interoperabilidade com Java, em Kotlin é possível usar diretamente as APIs padrão:
- DOM (Document Object Model) — carrega todo o documento na memória, conveniente para alterações.
- SAX (Simple API for XML) — parser orientado a eventos, consumo mínimo de memória.
- StAX (Streaming API for XML) — parser de fluxo com abordagem de cursor ou eventos.
Exemplo de parsing de XML com DOM em 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 é uma biblioteca popular para serialização/desserialização de objetos em XML. Ela usa anotações e não requer arquivos de configuração. É ideal para APIs REST com respostas XML.
Adicionar dependência (Gradle):
implementation("org.simpleframework:simple-xml:2.7.1")Exemplo de modelo e desserialização:
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 com formato XML
Para projetos multiplataforma (KMP), é conveniente usar kotlinx.serialization com um formato XML personalizado. Existem adaptadores de terceiros, como kotlinx-serialization-xml (da comunidade).
Exemplo com a biblioteca nl.adaptivity.xmlutil (suporta 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 e XSLT em Kotlin
Para selecionar dados com critérios complexos, use XPath. Em Kotlin, isso é feito através das classes Java padrão javax.xml.xpath
Também na biblioteca
Trabalho com ZIP/arquivos em C++: bibliotecas e exemplos de código
Trabalhando com CSV em Rust: biblioteca csv e processamento de dados
Criptografia em Go (Golang): criptografia e hash
Guia completo do Flurl para C# (.NET) com exemplos práticos
Nodemon para JavaScript (Node.js): guia completo com exemplos