Ранее мы узнали, как считывать XML — файл в Java с помощью DOM Parser
. Сегодня мы узнаем, как создать XML файл и записать в него нужную нам информацию на Java с помощью того же DOM Parser
.
Для начала определим перечень того, что будет в нашем xml-файле:
- Корневым элементом будет «Language» с пространством имен «
https://javadevblog.com/language
«. Этот корневой элемент будет содержать список языков программирования. - Информация о языках будет записана в элементе «Language». Всего в нашем XML файле будет информация о языках.
- Каждый язык имеет атрибут с именем «
id
« - Элемент язык будет иметь два элемента — «name», «age».
Ниже представлена программа, которая создает описанный выше Xml-файл:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package ua.com.prologistic; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; public class DOMxmlWriter { public static void main(String[] args) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder; try { builder = factory.newDocumentBuilder(); // создаем пустой объект Document, в котором будем // создавать наш xml-файл Document doc = builder.newDocument(); // создаем корневой элемент Element rootElement = doc.createElementNS("https://javadevblog.com/language", "Languages"); // добавляем корневой элемент в объект Document doc.appendChild(rootElement); // добавляем первый дочерний элемент к корневому rootElement.appendChild(getLanguage(doc, "1", "Java", "21")); //добавляем второй дочерний элемент к корневому rootElement.appendChild(getLanguage(doc, "2", "C", "44")); //создаем объект TransformerFactory для печати в консоль TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); // для красивого вывода в консоль transformer.setOutputProperty(OutputKeys.INDENT, "yes"); DOMSource source = new DOMSource(doc); //печатаем в консоль или файл StreamResult console = new StreamResult(System.out); StreamResult file = new StreamResult(new File("/Users/prologistic/languages.xml")); //записываем данные transformer.transform(source, console); transformer.transform(source, file); System.out.println("Создание XML файла закончено"); } catch (Exception e) { e.printStackTrace(); } } // метод для создания нового узла XML-файла private static Node getLanguage(Document doc, String id, String name, String age) { Element language = doc.createElement("Language"); // устанавливаем атрибут id language.setAttribute("id", id); // создаем элемент name language.appendChild(getLanguageElements(doc, language, "name", name)); // создаем элемент age language.appendChild(getLanguageElements(doc, language, "age", age)); return language; } // утилитный метод для создание нового узла XML-файла private static Node getLanguageElements(Document doc, Element element, String name, String value) { Element node = doc.createElement(name); node.appendChild(doc.createTextNode(value)); return node; } } |
Обратите внимание, что в нашей программе было создано два объекта StreamResult
: один для печати созданного XML содержимого в консоль для отладки и другой — для записи в XML файл.
Результат выполнения программы создания XML файла на Java с использованием DOM Parser:
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <Languages xmlns="https://javadevblog.com/language"> <Language id="1"> <name>Java</name> <age>21</age> </Language> <Language id="2"> <name>C</name> <age>44</age> </Language> </Languages> |
Как видим, результат работы первого StreamResult
пошел вывел информацию в консоль, а другой создал новый XML-файл ../languages.xml.
Следите за другими статьями категории Работа с XML в Java.