В этом руководстве показано, как использовать встроенные API Java DOM для записи данных в XML-файл.
Содержание
- 1. Запись XML в файл
- 2. Симпатичный печатный XML
- 3. Запись XML-элементов, атрибутов, комментариев CDATA и т.Д
- 4. Часто задаваемые вопросы по DOM
- 4.1 Как отключить объявление XML?
- 4.2 Как изменить кодировку XML?
- 4.3 Как красиво распечатать XML-файл?
- 4.4 Как скрыть XML-декларацию?
- 4.5 Как изменить версию XML-декларации?
- 5. Скачать Исходный Код
- 6. Рекомендации
P.S Протестировано с Java 11
Прочтите это Как читать XML–файл на Java – (DOM-анализатор)
1. Запись XML в файл
Шаги по созданию и записи XML в файл.
- Создайте
Документ doc
. - Создайте XML-элементы, атрибуты и т.д. и добавьте их в
Документ doc
. - Создайте
Трансформатор
для записиДокумента doc
вВыходной поток
.
package com.mkyong.xml.dom; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.OutputStream; public class WriteXmlDom1 { public static void main(String[] args) throws ParserConfigurationException, TransformerException { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); // root elements Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement("company"); doc.appendChild(rootElement); doc.createElement("staff"); rootElement.appendChild(doc.createElement("staff")); //...create XML elements, and others... // write dom document to a file try (FileOutputStream output = new FileOutputStream("c:\\test\\staff-dom.xml")) { writeXml(doc, output); } catch (IOException e) { e.printStackTrace(); } } // write doc to output stream private static void writeXml(Document doc, OutputStream output) throws TransformerException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(output); transformer.transform(source, result); } }
Выход
mkyong
2. Симпатичный печатный XML
2.1 По умолчанию Трансформатор
выводит XML в компактном формате.
mkyong
2.2 Мы можем установить Клавиши вывода. ОТСТУП
в Трансформатор
для включения красивого формата печати.
TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // pretty print XML transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(output); transformer.transform(source, result);
Выход
mkyong
3. Запись XML-элементов, атрибутов, комментариев CDATA и т.Д
В приведенном ниже примере используется анализатор DOM для создания и записи XML в Поток вывода
.
package com.mkyong.xml.dom; import org.w3c.dom.CDATASection; import org.w3c.dom.Comment; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class WriteXmlDom3 { public static void main(String[] args) throws ParserConfigurationException, TransformerException { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); // root elements Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement("company"); doc.appendChild(rootElement); // staff 1001 // add xml elements Element staff = doc.createElement("staff"); // add staff to root rootElement.appendChild(staff); // add xml attribute staff.setAttribute("id", "1001"); // alternative // Attr attr = doc.createAttribute("id"); // attr.setValue("1001"); // staff.setAttributeNode(attr); Element name = doc.createElement("name"); // JDK 1.4 //name.appendChild(doc.createTextNode("mkyong")); // JDK 1.5 name.setTextContent("mkyong"); staff.appendChild(name); Element role = doc.createElement("role"); role.setTextContent("support"); staff.appendChild(role); Element salary = doc.createElement("salary"); salary.setAttribute("currency", "USD"); salary.setTextContent("5000"); staff.appendChild(salary); // add xml comment Comment comment = doc.createComment( "for special characters like < &, need CDATA"); staff.appendChild(comment); Element bio = doc.createElement("bio"); // add xml CDATA CDATASection cdataSection = doc.createCDATASection("HTML tag testing"); bio.appendChild(cdataSection); staff.appendChild(bio); // staff 1002 Element staff2 = doc.createElement("staff"); // add staff to root rootElement.appendChild(staff2); staff2.setAttribute("id", "1002"); Element name2 = doc.createElement("name"); name2.setTextContent("yflow"); staff2.appendChild(name2); Element role2 = doc.createElement("role"); role2.setTextContent("admin"); staff2.appendChild(role2); Element salary2 = doc.createElement("salary"); salary2.setAttribute("currency", "EUD"); salary2.setTextContent("8000"); staff2.appendChild(salary2); Element bio2 = doc.createElement("bio"); // add xml CDATA bio2.appendChild(doc.createCDATASection("a & b")); staff2.appendChild(bio2); // print XML to system console writeXml(doc, System.out); } // write doc to output stream private static void writeXml(Document doc, OutputStream output) throws TransformerException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // pretty print transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(output); transformer.transform(source, result); } }
Выход
mkyong support 5000 yflow admin 8000
4. Часто задаваемые вопросы по DOM
Некоторые парсеры DOM часто задавали вопросы.
4.1 Как отключить объявление XML?
Мы можем настроить Клавиши вывода. ОПУЩЕН_XML_DECLARATION
для отображения XML-объявления.
// hide the xml declaration // hide transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
4.2 Как изменить кодировку XML?
Мы можем настроить Клавиши вывода. КОДИРОВКА
для изменения кодировки XML.
// set xml encoding // transformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
4.3 Как красиво распечатать XML-файл?
Мы можем настроить Клавиши вывода. ОТСТУП
, чтобы включить красивую печать XML.
// pretty print transformer.setOutputProperty(OutputKeys.INDENT, "yes");
4.4 Как скрыть XML-декларацию`?
Мы можем настроить document.setxmlstandalone(true)
, чтобы скрыть объявление XML автономный="нет"
.
TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // pretty print transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // hide the standalone="no" doc.setXmlStandalone(true); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(output); transformer.transform(source, result);
4.5 Как изменить версию XML-декларации?
Мы можем настроить document.setxmlversion("версия")
для изменения версии XML-декларации.
// set xml version // doc.setXmlVersion("1.1");
5. Скачать Исходный Код
$клон git $клон git
$компакт-диск java-xml
$cd src/основной/java/com/mkyong/xml/дом/
6. Рекомендации
- Википедия – Объектная модель документа
- Oracle – Java API для обработки XML (JAXP)
- Объектная модель Oracle – Документа
- Как написать XML–файл на Java – (JDOM)
- Как написать XML-файл на Java (STAX Writer)
- Как читать XML–файл на Java – (синтаксический анализатор SAX)
- Как читать XML–файл на Java – (синтаксический анализатор JDOM)
- Как читать XML–файл на Java – (DOM-анализатор)
- Пример JAXB привет, мир
Оригинал: “https://mkyong.com/java/how-to-create-xml-file-in-java-dom/”