Запись XML в файл в Java
Строку разметки можно сразу отправить в файл.
Тот же Transformer принимает
StreamResult, привязанный к пути на диске,
а не только к буферу в памяти:
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
var builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("root");
doc.appendChild(root);
Element note = doc.createElement("note");
note.setTextContent("memo");
root.appendChild(note);
Path target = Path.of("memo.xml");
TransformerFactory.newInstance().newTransformer()
.transform(
new DOMSource(doc),
new StreamResult(target.toFile())
);
}
}
После записи файл можно разобрать тем же
DocumentBuilder, передав File
или Path:
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilderFactory;
import java.nio.file.Path;
public class Main {
public static void main(String[] args) throws Exception {
Path target = Path.of("memo.xml");
var doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(target.toFile());
Element note = (Element) doc
.getElementsByTagName("note")
.item(0);
System.out.println(note.getTextContent());
}
}
Если документ уже превращён в строку, подойдёт
Files.writeString из пакета
java.nio.file. Так проще править текст
вручную, но дерево DOM при этом не обновляется
само по себе.
Соберите корень report с тегом
title и текстом "daily".
Запишите документ в файл report.xml,
снова разберите его и выведите заголовок
в консоль.
Создайте два тега item с текстами
"one" и "two" под корнем
list. Сохраните разметку в
list.xml, прочитайте файл и
напечатайте текст каждого item
в цикле.