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 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;}@Overridepublic 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 elementAttribute idAttr = startElement.getAttributeByName(new QName("id"));if(idAttr != null){emp.setId(Integer.parseInt(idAttr.getValue()));}}//set the other varibles from xml elementselse 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 listif(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

java xml stax_Java StAX解析器示例以读取XML文件相关推荐

  1. java stax_Java StAX解析器

    StAX是一个基于JAVA API用于解析XML文档,类似SAX解析器的方式.但两种API之间有两个区别 StAX是PULL API,其中作为SAX是PUSH API.这意味着如果StAX解析器,客户 ...

  2. java sax解析xml_在Java中使用DOM,SAX和StAX解析器解析XML

    java sax解析xml 我碰巧通读了有关Java中XML解析和构建API的章节. 我试用了样本XML上的其他解析器. 然后,我想在我的博客上分享它,这样我就可以得到该代码的参考以及任何阅读此代码的 ...

  3. 在Java中使用DOM,SAX和StAX解析器解析XML

    我碰巧通读了有关Java中的XML解析和构建API的章节. 我试用了样本XML上的其他解析器. 然后,我想在我的博客上分享它,这样我就可以参考该代码以及任何阅读此书的参考. 在本文中,我将在不同的解析 ...

  4. java sax解析器_Java SAX解析器示例

    java sax解析器 SAX Parser in java provides API to parse XML documents. SAX parser is different from DOM ...

  5. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.6.2 使用StAX解析器

    3.6.2 使用StAX解析器 StAX解析器是一种"拉解析器(pull parser)",与安装事件处理器不同,你只需使用下面这样的基本循环来迭代所有的事件: 解析器将产生下面的 ...

  6. XML——流机制解析器

    [0]README 0.1) 本文文字描述转自 core java volume 2 , 旨在理解 XML--流机制解析器 的基础知识 : 0.2) for detailed StAX, please ...

  7. boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序

    boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型解析器的测试程序 C++实 ...

  8. boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST

    boost::spirit模块实现一个类似于 XML 的小型解析器,Karma 用于打印生成的 AST 实现功能 C++实现代码 实现功能 boost::spirit模块实现一个类似于 XML 的小型 ...

  9. Java解析xml的主要解析器: SAX和DOM的选择(附上新方法--Pull解析)

    Java的xml解析器库有很多,总的来说,万变不离其宗的就是SAX和DOM解析器. SAX的包是org.xml.sax DOM的包是org.w3c.dom 1) DOM DOM 是用与平台和语言无关的 ...

最新文章

  1. h.264的NAL和VCL
  2. React 项目--创建组件(7)
  3. yum -y --downloadonly --downloaddir=/ruiy upggrde;
  4. 所有的工程师都鄙视 php 工程师.,程序员的鄙视链(所有工程师都鄙视php工程师23333)...
  5. 分发 WxWidgets 应用程序
  6. 大话西游之Office应用实例系列! 13
  7. 选择开源项目什么最重要?
  8. d3设置line长度_Graph Embedding之LINE算法解读
  9. Android:应用商城
  10. OGG_GoldenGate日常维护(案例)
  11. nginx的upstream实现负载均衡自带坏点自动剔除功能
  12. Java后台开发常用工具集合
  13. Linux下数据库可视化软件推荐
  14. 计算2+4+6...+100的值 python_Python100例核心知识,你知道多少
  15. 小米wifi设置access_小米随身wifi到手,准备开搞当个ap给linux共享wifi上网!
  16. Javassist学习文档
  17. 【IoT】NFC APDU 使用基础浅析
  18. 华硕老毛子Padavan使用IPV6+Aliddns远程管理路由
  19. 一个好用的vscode文件图标美化插件
  20. 一线城市的这些人,凌晨四点都在做什么?

热门文章

  1. webpack模块定义和使用的模式
  2. HaspMap的新奇用法
  3. 【Python】Scrapy入门实例
  4. Android UI 绘制过程浅析(二)onMeasure过程
  5. [转载] 【Python】向json文件中追加新的对象
  6. [转载] Python中字符串切片详解
  7. [转载] python numpy.random.randn()与numpy.random.rand()的区别 (正态分布公式)(标准正态分布 standard normal distribution
  8. zabbix4.0LTS安装配置
  9. 某考试 T3 sine
  10. 【被C折腾系列】用C调DIOCP编码客户端通信