java xml stax_Java StAX解析器示例以读取XML文件

java xml stax

We can use Java StAX parser to read XML file. Java Streaming API for XML (Java StAX) provides implementation for processing XML in java. StAX consists of two sets of API – cursor based API and iterator based API.

我们可以使用Java StAX解析器读取XML文件。 用于XML的Java流API (Java StAX)提供了用于在Java中处理XML的实现。 StAX由两组API组成- 基于游标的API基于迭代器的API

Java StAX (Java StAX)

java stax, stax parser example, java stax parser example read xml file

Java StAX cursor based API allows the application to process XML as a stream of tokens aka events; the application can check the parser’s state and get information about the last parsed event, then advance to the next event, and so on. This is a low-level API; while considerably efficient, it does not provide an abstraction of the underlying XML structure.


基于Java StAX光标的API允许应用程序将XML作为令牌(又称为事件)流进行处理。 应用程序可以检查解析器的状态并获取有关上一个已解析事件的信息,然后前进到下一个事件,依此类推。 这是一个底层API。 尽管效率很高,但它没有提供底层XML结构的抽象。

The higher-level iterator-based API allows the application to process XML as a series of event objects, each of which communicates a piece of the XML structure to the application. All the application needs to do is determine the type of the parsed event, cast it to the corresponding type, and use its methods to get information related to the event.

基于高级迭代器的API允许应用程序将XML作为一系列事件对象进行处理,每个事件对象都将XML结构的一部分传达给应用程序。 应用程序所需要做的就是确定已解析事件的类型,将其转换为相应的类型,并使用其方法来获取与该事件相关的信息。

In this tutorial we will learn how to read XML iteratively using Java StAX. It provides factory methods to create XMLEventReader object using which we can read the xml elements as XMLEvent. Some useful methods in XMLEvent implementation are isStartElement() and isEndElement() to determine whether it’s start tag or end tag.

在本教程中,我们将学习如何使用Java StAX迭代读取XML。 它提供了工厂方法来创建XMLEventReader对象,通过该方法我们可以将xml元素读取为XMLEvent 。 XMLEvent实现中一些有用的方法是isStartElement()isEndElement()以确定它是开始标记还是结束标记。

In last tutorial, we learned how to write xml file in java using java StAX Iterator API.

在上一教程中,我们学习了如何使用Java StAX Iterator API在Java中编写xml文件

For this tutorial we have following XML file that contains list of Employee, we will use Java StAX Iterator API to read XML file and create list of Employee object.

在本教程中,我们有以下包含Employee列表的XML文件,我们将使用Java StAX Iterator API读取XML文件并创建Employee对象的列表。

employee.xml

employee.xml

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
	<Employee id="1">
		<age>29</age>
		<name>Pankaj</name>
		<gender>Male</gender>
		<role>Java Developer</role>
	</Employee>
	<Employee id="2">
		<age>35</age>
		<name>Lisa</name>
		<gender>Female</gender>
		<role>Manager</role>
	</Employee>
</Employees>

To read this XML into Employees list, we will create Employee bean first.

要将XML读取到Employees列表中,我们将首先创建Employee bean。

Employee.java

Employee.java

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 StAX解析器示例以读取XML文件 (Java StAX Parser Example to read XML file)

Here is the program that reads the xml file and create employees list.

这是读取xml文件并创建员工列表的程序。

StaxXMLReader.java

StaxXMLReader.java

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";
        List<Employee> empList = parseXML(fileName);
        for(Employee emp : empList){
            System.out.println(emp.toString());
        }
    }

    private static List<Employee> parseXML(String fileName) {
        List<Employee> 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;
    }

}

When we execute above program, we get following output in console.

当我们执行上面的程序时,我们在控制台中得到以下输出。

Employee:: ID=1 Name=Pankaj Age=29 Gender=Male Role=Java Developer
Employee:: ID=2 Name=Lisa Age=35 Gender=Female Role=Manager

That’s all for a quick Java StAX parser example to read XML file.

这就是一个快速的Java StAX解析器示例以读取XML文件的全部内容。

翻译自: https://www.journaldev.com/1191/java-stax-parser-example-read-xml-file

java xml stax

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值