Sobes.tech
Middle

Ako sa pracuje s XML v Kotlin?

sobes.tech AI

Odpoveď od AI

Práca s XML v Kotlin môže byť realizovaná rôznymi spôsobmi, v závislosti od úlohy a preferencií:

  1. Štandardné Java API: Kotlin je plne kompatibilný s Java, takže je možné použiť štandardné Java XML API:

    • javax.xml.parsers.DocumentBuilderFactory a org.w3c.dom.Document pre DOM-parsing (pohodlné na navigáciu v štruktúre).
    • javax.xml.stream.XMLInputFactory a javax.xml.stream.events.XMLEvent alebo javax.xml.stream.XMLStreamReader pre StAX-parsing (udalosťové, efektívnejšie pre veľké súbory).
    • javax.xml.transform.TransformerFactory na transformáciu XML (XSLT).
    • javax.xml.bind.JAXBContext pre JAXB (viazanie XML na Java objekty, hoci v modernom Kotlin sú preferované kotlinx.serialization alebo Moshi s pluginom pre XML).
  2. Koručiny a Flow (pre asynchrónne spracovanie): Pri práci s sieťovými požiadavkami, ktoré vracajú XML, je možné použiť koručiny na vykonanie parsovania na pozadí a Flow na spracovanie sekvencie prvkov alebo udalostí XML.

  3. Externé knižnice: Existuje množstvo externých knižníc, ktoré poskytujú pohodlnejšie alebo špecializovanejšie spôsoby práce s XML v Kotlin:

    • Kotlinx.serialization-xml: Experimentálny plugin pre kotlinx.serialization, umožňujúci serializáciu/deserializáciu Kotlin objektov do XML.
    • Moshi: Hoci je primárne pre JSON, existujú rozšírenia alebo adaptéry pre prácu s XML.
    • Simple XML Serialization: Populárna Java knižnica, ktorú možno použiť v Kotlin.
    • Jackson XML: Časť knižnice Jackson, s podporou serializácie/deserializácie Java/Kotlin objektov do XML.

Príklad DOM-parsingu:

import javax.xml.parsers.DocumentBuilderFactory
import org.w3c.dom.Document
import java.io.File

fun parseXmlFile(filePath: String): Document {
    val factory = DocumentBuilderFactory.newInstance()
    val builder = factory.newDocumentBuilder()
    val inputFile = File(filePath)
    return builder.parse(inputFile)
}

fun main() {
    val doc = parseXmlFile("example.xml")
    // Ďalšia práca s DOM stromom
    // println("Root element :" + doc.documentElement.nodeName)
}

Príklad StAX-parsingu (Pull parser):

import javax.xml.stream.XMLInputFactory
import java.io.FileInputStream

fun processXmlStream(filePath: String) {
    val inputFactory = XMLInputFactory.newInstance()
    val xmlReader = inputFactory.createXMLStreamReader(FileInputStream(filePath))

    while (xmlReader.hasNext()) {
        when (xmlReader.next()) {
            javax.xml.stream.XMLStreamConstants.START_ELEMENT -> {
                // Spracovanie začiatku elementu
            }
            javax.xml.stream.XMLStreamConstants.CHARACTERS -> {
                // Spracovanie textového obsahu
            }
            // Iné udalosti (END_ELEMENT, COMMENT atď.)
        }
    }
    xmlReader.close()
}

fun main() {
    // processXmlStream("example.xml")
}

Výber metódy závisí od veľkosti XML súboru, potreby navigácie v jeho štruktúre, výkonu a štýlu programovania (imperatívny vs. deklaratívny, použitie knižníc). Pre jednoduché prípady postačia štandardné Java API, pre zložitejšie štruktúry alebo binding na objekty môžu byť vhodnejšie kotlinx.serialization-xml alebo Jackson XML.