Trabalho com XML em Kotlin: bibliotecas, parsing e criação de documentos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations