Введение в XML в Kotlin
XML - текстовый формат для структурированных данных. Его часто передают между сервисами или сохраняют в файле. Разметка похожа на HTML, но имена тегов и атрибутов задает автор схемы.
Документ начинается с объявления версии и содержит один корневой тег, внутри которого лежит всё содержимое. Каждый тег может иметь атрибуты в угловых скобках и текст между открывающим и закрывающим именем:
<?xml version="1.0"?>
<root>
<city code="spb">Saint Petersburg</city>
</root>
Здесь корень - root, внутри тег city
с атрибутом code и текстом названия.
На JVM такой текст разбирают через DOM API из JDK:
фабрика DocumentBuilderFactory создаёт
DocumentBuilder, а строка передаётся через
InputSource и StringReader.
Короткий разбор той же строки в программе выглядит так:
import org.xml.sax.InputSource
import java.io.StringReader
import javax.xml.parsers.DocumentBuilderFactory
fun main() {
val xml = """
<?xml version="1.0"?>
<root>
<city code="spb">Saint Petersburg</city>
</root>
""".trimIndent()
val builder = DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
val doc = builder.parse(
InputSource(StringReader(xml))
)
val root = doc.documentElement
println(root.tagName)
val city = doc.getElementsByTagName("city")
.item(0)
println(city.attributes.getNamedItem("code").nodeValue)
println(city.textContent)
}
Свойство documentElement указывает на корень,
getElementsByTagName находит узлы по имени,
textContent возвращает текст внутри тега.
Дальнейшие уроки опираются на эту цепочку без
отдельных библиотек.