Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktSpXmBld 248 of 299 menu
◀ ▶

Сборка 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 одной строкой вывода.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить