Автор оригинала: Pankaj Kumar.
Мы можем использовать синтаксический анализатор Java StAX для чтения XML-файла. Java Streaming API для XML (Java StAX) предоставляет реализацию для обработки XML в java. StAX состоит из двух наборов API – API на основе курсора и API на основе итератора .
Java StAX
API на основе курсора Java StAX позволяет приложению обрабатывать XML в виде потока токенов, называемых событиями; приложение может проверять состояние анализатора и получать информацию о последнем проанализированном событии, затем переходить к следующему событию и так далее. Это низкоуровневый API; несмотря на значительную эффективность, он не обеспечивает абстракцию базовой структуры XML.
API на основе итераторов более высокого уровня позволяет приложению обрабатывать XML в виде серии объектов событий, каждый из которых передает часть структуры XML приложению. Все, что нужно сделать приложению, это определить тип анализируемого события, привести его к соответствующему типу и использовать его методы для получения информации, связанной с событием.
В этом уроке мы узнаем, как читать XML итеративно, используя Java StAX . Он предоставляет заводские методы для создания XMLEventReader
объекта, с помощью которого мы можем считывать xml-элементы как XML-событие
. Некоторые полезные методы в реализации XMLEvent-это IsStartElement()
и isEndElement ()
, чтобы определить, является ли это начальным тегом или конечным тегом.
В последнем уроке мы узнали, как написать xml-файл на java с помощью API итератора java StAX .
Для этого урока у нас есть следующий XML-файл, содержащий список сотрудников, мы будем использовать API итератора Java StAX для чтения XML-файла и создания списка объектов сотрудников.
Для этого урока у нас есть следующий XML-файл, содержащий список сотрудников, мы будем использовать API итератора Java StAX для чтения XML-файла и создания списка объектов сотрудников.
29 Pankaj Male Java Developer 35 Lisa Female Manager
Чтобы прочитать этот XML-файл в списке сотрудников, мы сначала создадим компонент сотрудника.
Чтобы прочитать этот 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; } }
Пример синтаксического анализатора Java Sax для чтения XML-файла
Вот программа, которая считывает xml-файл и создает список сотрудников.
Вот программа, которая считывает xml-файл и создает список сотрудников.
package com.journaldev.xml; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; public class StaxXMLReader { public static void main(String[] args) { String fileName = "/Users/pankaj/employee.xml"; ListempList = parseXML(fileName); for(Employee emp : empList){ System.out.println(emp.toString()); } } private static List parseXML(String fileName) { List empList = new ArrayList<>(); Employee emp = null; XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); try { XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new FileInputStream(fileName)); while(xmlEventReader.hasNext()){ XMLEvent xmlEvent = xmlEventReader.nextEvent(); if (xmlEvent.isStartElement()){ StartElement startElement = xmlEvent.asStartElement(); if(startElement.getName().getLocalPart().equals("Employee")){ emp = new Employee(); //Get the 'id' attribute from Employee element Attribute idAttr = startElement.getAttributeByName(new QName("id")); if(idAttr != null){ emp.setId(Integer.parseInt(idAttr.getValue())); } } //set the other varibles from xml elements else if(startElement.getName().getLocalPart().equals("age")){ xmlEvent = xmlEventReader.nextEvent(); emp.setAge(Integer.parseInt(xmlEvent.asCharacters().getData())); }else if(startElement.getName().getLocalPart().equals("name")){ xmlEvent = xmlEventReader.nextEvent(); emp.setName(xmlEvent.asCharacters().getData()); }else if(startElement.getName().getLocalPart().equals("gender")){ xmlEvent = xmlEventReader.nextEvent(); emp.setGender(xmlEvent.asCharacters().getData()); }else if(startElement.getName().getLocalPart().equals("role")){ xmlEvent = xmlEventReader.nextEvent(); emp.setRole(xmlEvent.asCharacters().getData()); } } //if Employee end element is reached, add employee object to list if(xmlEvent.isEndElement()){ EndElement endElement = xmlEvent.asEndElement(); if(endElement.getName().getLocalPart().equals("Employee")){ empList.add(emp); } } } } catch (FileNotFoundException | XMLStreamException e) { e.printStackTrace(); } return empList; } }
Когда мы выполняем вышеуказанную программу, мы получаем следующий вывод в консоли.
Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java Developer Employee:: ID=2 Name=Lisa Age=35 Gender=Female Role=Manager
Это все для быстрого примера синтаксического анализа Java Sax для чтения XML-файла.