Рубрики
Без рубрики

Синтаксический анализатор JDOM – Считывает XML-файл в объект на Java

Синтаксический анализатор JDOM, Java Считывает XML-файл в объект, Пример JSON, Учебник по JSON, Пример синтаксического анализатора JSON, org.jdom2, JDOM2, API JDOM, DOMBuilder, SAXBuilder, класс JDOM

Автор оригинала: 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 Парсер Важных Классов

  1. org.jdom2.ввод.DOMBuilder : Использует синтаксический анализатор DOM для анализа XML и преобразования его в документ JDOM.
  2. org.jdom2.ввод.SAXBuilder : Использует синтаксический анализатор SAX для анализа XML и преобразования его в документ JDOM.
  3. org.jdom2.ввод.Конструктор событий Sax : Использует анализатор событий STAX для анализа XML и преобразования его в документ JDOM.
  4. org.jdom2.ввод.Sax Stream Builder : Использует анализатор потоков STAX для анализа XML и преобразования его в документ JDOM.
  5. организация.jdom2.Документ : Документ JDOM предоставляет полезные методы для получения корневого элемента, чтения, редактирования и записи содержимого в элементы. Здесь мы будем использовать его для получения корневого элемента из XML.
  6. 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