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:
-
Standardsed Java API-d: Kotlin on täielikult Java-ga ühilduv, seega saab kasutada standardseid Java XML API-sid:
javax.xml.parsers.DocumentBuilderFactoryjaorg.w3c.dom.DocumentDOM-parsimiseks (mugav struktuuri navigeerimiseks).javax.xml.stream.XMLInputFactoryjajavax.xml.stream.events.XMLEventvõijavax.xml.stream.XMLStreamReaderStAX-parsimiseks (sündmuspõhine, tõhusam suurte failide puhul).javax.xml.transform.TransformerFactoryXML-i transformatsiooniks (XSLT).javax.xml.bind.JAXBContextJAXB jaoks (XML-i sidumine Java-objektidega, kuigi kaasaegses Kotlinis eelistatakse sageli kotlinx.serialization või Moshi XML-i pluginaga).
-
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.
-
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.