Arbeit mit XML in Kotlin: Überblick über Bibliotheken und praktische Beispiele
Trotz der aktiven Einführung von JSON und YAML bleibt XML ein gefragtes Format in Unternehmenssystemen, Konfigurationsdateien, SOAP-Protokollen und der Android-Entwicklung. Kotlin, kompatibel mit Java, bietet Zugriff auf alle ausgereiften Java-Bibliotheken für die Arbeit mit XML und verfügt über eigene native Lösungen. In diesem Artikel werden wir fünf Hauptansätze zur XML-Verarbeitung in Kotlin behandeln, einschließlich Parsing, Erstellung und Validierung von Dokumenten.
1. Integrierte Mittel: DOM, SAX, StAX
Kotlin verwendet direkt die standardmäßige Java-API für XML. Dies ist der einfachste Weg für schnelle Aufgaben, erfordert jedoch viel Boilerplate-Code.
DOM (Document Object Model)
Lädt das gesamte XML in den Speicher und ermöglicht wahlfreien Zugriff auf Knoten. Geeignet für kleine Dokumente.
import javax.xml.parsers.DocumentBuilderFactoryimport org.w3c.dom.Element
fun parseWithDOM(xml: String) { val factory = DocumentBuilderFactory.newInstance() val builder = factory.newDocumentBuilder() val doc = builder.parse(xml.byteInputStream()) val books = doc.getElementsByTagName("book") for (i in 0 until books.length) { val book = books.item(i) as Element val title = book.getElementsByTagName("title").item(0).textContent println("Buch: $title") }}SAX (Simple API for XML)
Streaming-Parser, der nicht das gesamte Dokument in den Speicher lädt. Effizient für große Dateien, aber komplex in der Implementierung.
import org.xml.sax.helpers.DefaultHandlerimport org.xml.sax.Attributesimport javax.xml.parsers.SAXParserFactory
class BookHandler : DefaultHandler() { override fun startElement(uri: String, localName: String, qName: String, attributes: Attributes) { if (qName == "book") { println("Buch mit id: ${attributes.getValue("id")} gefunden") } }}
fun parseWithSAX(xml: String) { val factory = SAXParserFactory.newInstance() val parser = factory.newSAXParser() parser.parse(xml.byteInputStream(), BookHandler())}2. JDOM — praktische API für Kotlin
JDOM ist eine beliebte Java-Bibliothek, die sich dank Unterstützung von Collections und Extension-Funktionen hervorragend in Kotlin integrieren lässt. Ermöglicht das Lesen, Ändern und Erstellen von XML ohne umständliche Fabriken.
Parsing und Navigation
import org.jdom2.input.SAXBuilderimport org.jdom2.Element
fun parseWithJDOM(xml: String) { val builder = SAXBuilder() val doc = builder.build(xml.byteInputStream()) val root = doc.rootElement root.getChildren("book").forEach { book -> val title = book.getChildText("title") val author = book.getChildText("author") println("$title — $author") }}XML von Grund auf erstellen
import org.jdom2.Documentimport org.jdom2.Elementimport org.jdom2.output.XMLOutputter
fun createXML(): String { val root = Element("library") val book = Element("book").apply { setAttribute("id", "1") addContent(Element("title").setText("Kotlin in Action")) addContent(Element("author").setText("Dmitry Jemerov")) } root.addContent(book) val doc = Document(root) val outputter = XMLOutputter().apply { format = org.jdom2.output.Format.getPrettyFormat() } return outputter.outputString(doc)}3. XOM — Einfachheit und Strenge
XOM folgt dem Prinzip "immutable by default" — alle Knoten können nach der Erstellung nicht mehr geändert, sondern nur ersetzt werden. Dies macht den Code vorhersagbar und sicher. Die Bibliothek prüft automatisch die Korrektheit der Struktur.
import nu.xom.Builderimport nu.xom.Serializer
fun parseWithXOM(xml: String) { val builder = Builder() val doc = builder.build(xml, null) val root = doc.rootElement Auch in der Bibliothek
Objekt-Serialisierung in Rust: serde, bincode, JSON und YAML
Observation Swift: Komplettleitfaden mit Beispielen
NetworkExtension Swift: Vollständige Anleitung mit Beispielen
Mongoose für JavaScript (Node.js): vollständiges Handbuch mit Beispielen
Rate Limiting in PHP: Begrenzung der Anfragehäufigkeit zum Schutz der Website