Сборка XML-документа в Kotlin
Разбор строки - не единственный путь. Тот же
DocumentBuilder умеет создать пустой
Document, после чего узлы добавляют
вручную:
import javax.xml.parsers.DocumentBuilderFactory
val builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
val doc = builder.newDocument()
val root = doc.createElement("root")
doc.appendChild(root)
Дочерние элементы создают через createElement,
текст задают свойством textContent,
атрибуты - setAttribute, связь с родителем -
appendChild:
import javax.xml.parsers.DocumentBuilderFactory
fun main() {
val builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
val doc = builder.newDocument()
val root = doc.createElement("root")
doc.appendChild(root)
val note = doc.createElement("note")
note.setAttribute("lang", "en")
note.textContent = "memo"
root.appendChild(note)
}
Готовое дерево превращают в текст через
Transformer и поток в память:
import java.io.StringWriter
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
fun main() {
val builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
val doc = builder.newDocument()
val root = doc.createElement("root")
doc.appendChild(root)
val note = doc.createElement("note")
note.textContent = "memo"
root.appendChild(note)
val writer = StringWriter()
TransformerFactory.newInstance().newTransformer()
.transform(
DOMSource(doc),
StreamResult(writer)
)
println(writer.toString())
}
Соберите документ с корнем catalog и одним
тегом book с атрибутом isbn
"978-0" и текстом "Kotlin guide".
Выведите получившуюся строку XML в консоль.
Соберите корень shipment и два тега
crate с атрибутами weight
"10" и "15". Внутри каждого
crate добавьте label с текстами
"A" и "B". Напечатайте итоговый
XML одной строкой вывода.