В прошлом уроке мы узнали научились считывать данные с XML файла с помощью Java JDOM Parser. В этой статье мы попрактикуемся в записи данных в XML файл с помощью того же JDOM.
JDOM предоставляет множество методов для удобной записи данных в XML, работе с элементами и атрибутами. Для этого используется специальный класс XMLOutputter
, который может быть использован для записи документа в любой OutputStream или Writer объект.
В нашем примере мы используем maven, поэтому просто добавим в pom.xml
в зависимости следующий код:
1 2 3 4 5 6 7 |
<dependencies> <dependency> <groupId>org.jdom</groupId> <artifactId>jdom</artifactId> <version>2.0.2</version> </dependency> </dependencies> |
Перейдем к практике, где создадим список объектов Student, а затем запишем его в файл XML.
Класс Student имеет следующий вид:
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 |
package ua.com.prologistic; public class Student { private int id; private String name; private int age; private String language; public Student() { } public Student(int id, String name, int age, String language) { this.id = id; this.name = name; this.age = age; this.language = language; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public int getId() { return id; } public void setId(int id) { this.id = id; } } |
Также мы установим атрибут id каждому элементу Student и добавим пространство имен для корневого элемента:
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 |
package ua.com.prologistic; import org.jdom2.Document; import org.jdom2.Element; import org.jdom2.Namespace; import org.jdom2.output.Format; import org.jdom2.output.XMLOutputter; import ua.com.prologistic.Student; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class XMLjdomWriter { public static void main(String[] args) throws IOException { // формируем список объектов Student List<Student> students = new ArrayList<>(); students.add(new Student(1, "Andrew", 21, "Java")); students.add(new Student(2, "Viktor", 20, "C++")); students.add(new Student(3, "Dima", 22, "JavaScript")); String fileName = "students.xml"; writeToXMLusingJDOM(students, fileName); } // метод записи в XML файл с помощью JDOM private static void writeToXMLusingJDOM(List<Student> students, String fileName) throws IOException { Document doc = new Document(); // создаем корневой элемент с пространством имен doc.setRootElement(new Element("Students", Namespace.getNamespace("https://javadevblog.com/students"))); // формируем JDOM документ из объектов Student for (Student student : students) { Element studentElement = new Element("Student", Namespace.getNamespace("https://javadevblog.com/students")); studentElement.setAttribute("id", String.valueOf(student.getId())); studentElement.addContent(new Element("age", Namespace.getNamespace("https://javadevblog.com/students")).setText("" + student.getAge())); studentElement.addContent(new Element("name", Namespace.getNamespace("https://javadevblog.com/students")).setText(student.getName())); studentElement.addContent(new Element("language", Namespace.getNamespace("https://javadevblog.com/students")).setText(student.getLanguage())); doc.getRootElement().addContent(studentElement); } // Документ JDOM сформирован и готов к записи в файл XMLOutputter xmlWriter = new XMLOutputter(Format.getPrettyFormat()); // сохнаряем в файл xmlWriter.output(doc, new FileOutputStream(fileName)); } } |
Обратите внимание, что мы сразу записали данные в XML файл. Если вы хотите посмотреть данные перед записью, то добавьте следующие строки для вывода сформированного JDOM документа в консоль:
1 |
xmlOutputter.output(doc, System.out); |
Также следует отметить, что мы устанавливаем пространство имен для каждого нового элемента Student. Если же Вы уберете явное указание пространства имен для каждого не корневого элемента с такого:
1 2 3 |
studentElement.addContent(new Element("language", Namespace.getNamespace("https://javadevblog.com/students")) .setText(student.getLanguage())); |
на такое:
1 2 |
studentElement.addContent(new Element("language") .setText(student.getLanguage())); |
то в выходном XML файле пространство имен будет пустым:
1 2 3 4 5 6 7 |
... <Student xmlns="" id="3"> <age>22</age> <name>Dima</name> <language>JavaScript</language> </Student> ... |
Результат выполнения записи в XML файл с помощью JDOM:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <Students xmlns="https://javadevblog.com/students"> <Student id="1"> <age>21</age> <name>Andrew</name> <language>Java</language> </Student> <Student id="2"> <age>20</age> <name>Viktor</name> <language>C++</language> </Student> <Student id="3"> <age>22</age> <name>Dima</name> <language>JavaScript</language> </Student> </Students> |
Следите за обновлениями раздела Обработка XML в Java и подписывайтесь на обновления сайта.