Автор оригинала: Pankaj Kumar.
JDOM parser предоставляет нам отличный Java XML API для легкого чтения, редактирования и записи XML-документов. JDOM предоставляет классы-оболочки для выбора базовой реализации из синтаксического анализатора SAX , синтаксического анализатора DOM , анализатора событий STAX и анализатора потоков STAX .
Синтаксический анализатор JDOM
В этом уроке мы узнаем, как считывать XML-файл в объект с помощью JDOM Parser .
JDOM не является частью стандартного JDK, поэтому для работы с JDOM вам нужно будет загрузить его двоичные файлы с Официального сайта JDOM . Как только двоичные файлы будут загружены, включите JDOM jar в свой путь к классам проекта, и вы можете начать его использовать. Для этого урока я использую текущую версию JDOM 2.0.4 ( jdom-2.0.4.jar ).
Как я уже говорил ранее, JDOM предоставляет классы-оболочки для выбора предпочтительного XML-API, он поставляется с четырьмя важными классами, с помощью которых мы можем получить объект документа JDOM. Объект документа JDOM предоставляет полезные методы для получения корневого элемента, списка дочерних элементов, получения значения атрибута для элемента и получения значения элемента из имени.
JDOM Парсер Важных Классов
org.jdom2.ввод.DOMBuilder: Использует синтаксический анализатор DOM для анализа XML и преобразования его в документ JDOM.org.jdom2.ввод.SAXBuilder: Использует синтаксический анализатор SAX для анализа XML и преобразования его в документ JDOM.org.jdom2.ввод.Конструктор событий Sax: Использует анализатор событий STAX для анализа XML и преобразования его в документ JDOM.org.jdom2.ввод.Sax Stream Builder: Использует анализатор потоков STAX для анализа XML и преобразования его в документ JDOM.- организация.jdom2.Документ : Документ JDOM предоставляет полезные методы для получения корневого элемента, чтения, редактирования и записи содержимого в элементы. Здесь мы будем использовать его для получения корневого элемента из XML.
org.jdom2.Element: Предоставляет полезные методы для получения списка дочерних элементов, получения значения дочернего элемента, получения значений атрибутов.
Пример JDOM
Давайте начнем с нашего примера программы для чтения XML в объект с помощью синтаксического анализатора JDOM.
Давайте начнем с нашего примера программы для чтения XML в объект с помощью синтаксического анализатора JDOM.
29 Pankaj Male Java Developer 35 Lisa Female CEO 40 Tom Male Manager
Объект Employee для представления элемента Employee в XML.
package com.journaldev.xml;
public class Employee {
private int id;
private String name;
private String gender;
private int age;
private String role;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString() {
return "Employee:: ID="+this.id+" Name=" + this.name + " Age=" + this.age + " Gender=" + this.gender +
" Role=" + this.role;
}
}
Вот тестовая программа, использующая DOMBuilder для чтения XML-файла в список Сотрудника объекта.
package com.journaldev.xml.jdom;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.DOMBuilder;
import org.jdom2.input.SAXBuilder;
import org.jdom2.input.StAXEventBuilder;
import org.jdom2.input.StAXStreamBuilder;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import com.journaldev.xml.Employee;
public class JDOMXMLReader {
public static void main(String[] args) {
final String fileName = "/Users/pankaj/employees.xml";
org.jdom2.Document jdomDoc;
try {
//we can create JDOM Document from DOM, SAX and STAX Parser Builder classes
jdomDoc = useDOMParser(fileName);
Element root = jdomDoc.getRootElement();
List empListElements = root.getChildren("Employee");
List empList = new ArrayList<>();
for (Element empElement : empListElements) {
Employee emp = new Employee();
emp.setId(Integer.parseInt(empElement.getAttributeValue("id")));
emp.setAge(Integer.parseInt(empElement.getChildText("age")));
emp.setName(empElement.getChildText("name"));
emp.setRole(empElement.getChildText("role"));
emp.setGender(empElement.getChildText("gender"));
empList.add(emp);
}
//lets print Employees list information
for (Employee emp : empList)
System.out.println(emp);
} catch (Exception e) {
e.printStackTrace();
}
}
//Get JDOM document from DOM Parser
private static org.jdom2.Document useDOMParser(String fileName)
throws ParserConfigurationException, SAXException, IOException {
//creating DOM Document
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder;
dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(new File(fileName));
DOMBuilder domBuilder = new DOMBuilder();
return domBuilder.build(doc);
}
}
Как вы можете видеть, я использую класс-оболочку синтаксического анализатора DOM для получения объекта документа JDOM.
Когда я запускаю вышеуказанную программу, вот результат.
Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java Developer Employee:: ID=2 Name=Lisa Age=35 Gender=Female Role=CEO Employee:: ID=3 Name=Tom Age=40 Gender=Male Role=Manager
Мы можем использовать SAX и Синтаксический анализатор STAX также, вот другие полезные методы, которые мы можем использовать для их использования.
//Get JDOM document from SAX Parser
private static org.jdom2.Document useSAXParser(String fileName) throws JDOMException,
IOException {
SAXBuilder saxBuilder = new SAXBuilder();
return saxBuilder.build(new File(fileName));
}
//Get JDOM Document from STAX Stream Parser or STAX Event Parser
private static org.jdom2.Document useSTAXParser(String fileName, String type) throws FileNotFoundException, XMLStreamException, JDOMException{
if(type.equalsIgnoreCase("stream")){
StAXStreamBuilder staxBuilder = new StAXStreamBuilder();
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(new FileInputStream(fileName));
return staxBuilder.build(xmlStreamReader);
}
StAXEventBuilder staxBuilder = new StAXEventBuilder();
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName));
return staxBuilder.build(xmlEventReader);
}
Вы получите тот же результат с помощью вышеуказанных методов также потому, что они просто меняют синтаксический анализатор и, наконец, возвращают тот же документ.
Преимущество использования JDOM заключается в том, что вы можете легко переключаться с SAX на DOM на синтаксический анализатор STAX, вы можете предоставить заводские методы, позволяющие клиентскому приложению выбирать реализацию.
Возможно, вы захотите отправиться в любой из них.
- Синтаксический анализатор DOM Читает Пример XML
- Синтаксический анализатор STAX Читает Пример XML
- Синтаксический анализатор SAX Читает Пример XML