Jak se pracuje s XML v Kotlinu?
sobes.tech AI
Odpověď od AI
Práce s XML v Kotlinu může být realizována několika způsoby, v závislosti na úkolu a preferencích:
-
Standardní Java API: Kotlin je plně kompatibilní s Javou, proto lze použít standardní Java XML API:
javax.xml.parsers.DocumentBuilderFactoryaorg.w3c.dom.Documentpro DOM-parsing (pohodlné pro navigaci ve struktuře).javax.xml.stream.XMLInputFactoryajavax.xml.stream.events.XMLEventnebojavax.xml.stream.XMLStreamReaderpro StAX-parsing (událostní, efektivnější pro velké soubory).javax.xml.transform.TransformerFactorypro transformaci XML (XSLT).javax.xml.bind.JAXBContextpro JAXB (vázání XML na Java objekty, i když v moderním Kotlinu jsou preferovány kotlinx.serialization nebo Moshi s pluginem pro XML).
-
Koručiny a Flow (pro asynchronní zpracování): Při práci s HTTP požadavky vracejícími XML lze použít koručiny pro provádění parsování na pozadí a Flow pro zpracování posloupnosti prvků nebo událostí XML.
-
Třetí strany knihovny: Existuje mnoho knihoven třetích stran, které poskytují pohodlnější nebo specializovanější způsoby práce s XML v Kotlinu:
- Kotlinx.serialization-xml: Experimentální plugin pro kotlinx.serialization, umožňující serializaci/deserializaci Kotlin objektů do XML.
- Moshi: Ačkoliv primárně pro JSON, existují rozšíření nebo adaptéry pro práci s XML.
- Simple XML Serialization: Populární Java knihovna, kterou lze použít v Kotlinu.
- Jackson XML: Část knihovny Jackson, s podporou serializace/deserializace Java/Kotlin objektů do XML.
Příklad DOM-parsing:
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")
// Další práce s DOM stromem
// println("Root element :" + doc.documentElement.nodeName)
}
Pří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 -> {
// Zpracování počátečního tagu
}
javax.xml.stream.XMLStreamConstants.CHARACTERS -> {
// Zpracování textového obsahu
}
// Další události (END_ELEMENT, COMMENT atd.)
}
}
xmlReader.close()
}
fun main() {
// processXmlStream("example.xml")
}
Volba metody závisí na velikosti XML souboru, potřebě navigace v jeho struktuře, výkonu a stylu programování (imperativní vs. deklarativní, použití knihoven). Pro jednoduché případy postačí standardní Java API, pro složitější struktury nebo binding k objektům mohou být vhodnější kotlinx.serialization-xml nebo Jackson XML.