Sobes.tech
Middle

Kuidas töötada XML-iga Kotlinis?

sobes.tech AI

Vastus AI-lt

Kotlinis XML-iga töötamine võib toimuda mitmel viisil, sõltuvalt ülesandest ja eelistustest:

  1. Standardsed Java API-d: Kotlin on täielikult Java-ga ühilduv, seega saab kasutada standardseid Java XML API-sid:

    • javax.xml.parsers.DocumentBuilderFactory ja org.w3c.dom.Document DOM-parsimiseks (mugav struktuuri navigeerimiseks).
    • javax.xml.stream.XMLInputFactory ja javax.xml.stream.events.XMLEvent või javax.xml.stream.XMLStreamReader StAX-parsimiseks (sündmuspõhine, tõhusam suurte failide puhul).
    • javax.xml.transform.TransformerFactory XML-i transformatsiooniks (XSLT).
    • javax.xml.bind.JAXBContext JAXB jaoks (XML-i sidumine Java-objektidega, kuigi kaasaegses Kotlinis eelistatakse sageli kotlinx.serialization või Moshi XML-i pluginaga).
  2. Koruutinate ja Flow kasutamine (asünkroonne töötlemine): Kui töötate võrgupäringutega, mis tagastavad XML-i, saate kasutada korutinaid taustal parsingu teostamiseks ja Flow-d XML-i elementide või sündmuste jada töötlemiseks.

  3. Kolmanda osapoole teegid: On palju kolmanda osapoole teeke, mis pakuvad mugavamaid või spetsialiseeritud viise XML-iga töötamiseks Kotlinis:

    • Kotlinx.serialization-xml: Eksperimentaalne plugin kotlinx.serialization jaoks, mis võimaldab Kotlin-objektide serialiseerimist/deserialiseerimist XML-i.
    • Moshi: Kuigi Moshi on peamiselt JSON-i jaoks, on olemas laiendused või adapterid XML-i jaoks.
    • Simple XML Serialization: Populaarne Java teek, mida saab kasutada Kotlinis.
    • Jackson XML: Jacksoni teekide osa, toetab Java/Kotlin-objektide serialiseerimist/deserialiseerimist XML-i.

Näide DOM-parsimisest:

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")
    // Edasine töö DOM-puuga
    // println("Root element :" + doc.documentElement.nodeName)
}

StAX-parsimise näide (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 -> {
                // val elementName = xmlReader.localName
                // ... töötle algtähist
            }
            javax.xml.stream.XMLStreamConstants.CHARACTERS -> {
                // val text = xmlReader.text
                // ... töötle tekstisisu
            }
            // ... muud sündmused (END_ELEMENT, COMMENT jms)
        }
    }
    xmlReader.close()
}

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

Valitud meetod sõltub XML-faili suurusest, struktuuri navigeerimise vajadusest, jõudlusest ja programmeerimisstiilist (imperatiivne vs. deklaratiivne, teekide kasutamine). Lihtsate juhtude jaoks piisab standardsetest Java API-dest, keerulisemate struktuuride või objektide sidumise puhul võib eelistada kotlinx.serialization-xml või Jackson XML-i.