Сборка XML-документа в Java
Разбор строки - не единственный путь. Тот же
DocumentBuilder умеет создать пустой
Document, после чего узлы добавляют
вручную:
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilderFactory;
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);
}
}
Дочерние элементы создают через createElement,
текст задают свойством setTextContent,
атрибуты - setAttribute, связь с родителем -
appendChild:
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import javax.xml.parsers.DocumentBuilderFactory;
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.setAttribute("lang", "en");
note.setTextContent("memo");
root.appendChild(note);
}
}
Готовое дерево превращают в текст через
Transformer и поток в память:
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.io.StringWriter;
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);
StringWriter writer = new StringWriter();
TransformerFactory.newInstance().newTransformer()
.transform(
new DOMSource(doc),
new StreamResult(writer)
);
System.out.println(writer);
}
}
Соберите документ с корнем catalog и одним
тегом book с атрибутом isbn
"978-0" и текстом "Java guide".
Выведите получившуюся строку XML в консоль.
Соберите корень shipment и два тега
crate с атрибутами weight
"10" и "15". Внутри каждого
crate добавьте label с текстами
"A" и "B". Напечатайте итоговый
XML одной строкой вывода.