book.xml
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
测试类:TestStax.java
package com.xml.stax;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.stream.EventFilter;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;
import org.junit.Test;
public class TestStax {
@Test
public void test1(){
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream is = null;
try {
is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLStreamReader reader = factory.createXMLStreamReader(is);
while(reader.hasNext()){
// System.out.println(reader.next());
int type = reader.next();
//判断节点的类型 是开始节点 文本节点 或者 结束节点 再进行处理
if(type == XMLStreamConstants.START_ELEMENT){
System.out.println(reader.getName().toString());
}else if(type == XMLStreamConstants.CHARACTERS){
System.out.println(reader.getText());
}else if(type == XMLStreamConstants.END_ELEMENT){
System.out.println(reader.getName());
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test2(){
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream is = null;
try {
is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLStreamReader reader = factory.createXMLStreamReader(is);
while(reader.hasNext()){
// System.out.println(reader.next());
int type = reader.next();
if(type == XMLStreamConstants.START_ELEMENT){
// System.out.println(reader.getName().toString());
String name = reader.getName().toString();
if("book".equals(name)){
System.out.println(reader.getAttributeName(0)+":"+reader.getAttributeValue(0));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test3(){
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream is = null;
try {
is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLStreamReader reader = factory.createXMLStreamReader(is);
while(reader.hasNext()){
// System.out.println(reader.next());
int type = reader.next();
if(type == XMLStreamConstants.START_ELEMENT){
// System.out.println(reader.getName().toString());
String name = reader.getName().toString();
if("title".equals(name)){
System.out.print(reader.getElementText()+":");
}
if("price".equals(name)){
System.out.print(reader.getElementText()+"\n");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test4(){
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream is = null;
try {
is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLEventReader reader = factory.createXMLEventReader(is);
//基于迭代类型的操作方式
int num = 0;
while(reader.hasNext()){
XMLEvent event = reader.nextEvent();
//通过XMLEvent来判断是何种类型
if(event.isStartElement()){
//再进行装换
String name = event.asStartElement().getName().toString();
if("title".equals(name)){
System.out.print(reader.getElementText()+":");
}
if("price".equals(name)){
System.out.print(reader.getElementText()+"\n");
}
}
num ++;
}
System.out.println(num);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test5(){
XMLInputFactory factory = XMLInputFactory.newInstance();
InputStream is = null;
try {
//增加过滤器 减少迭代的次数
is = TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLEventReader reader = factory.createFilteredReader(factory.createXMLEventReader(is), new EventFilter() {
@Override
public boolean accept(XMLEvent event) {
if(event.isStartElement()){
String name = event.asStartElement().getName().toString();
if("title".equals(name) || "price".equals(name)){
return true;
}
}
return false;
}
});
int num = 0;
//基于迭代类型的操作方式
while(reader.hasNext()){
XMLEvent event = reader.nextEvent();
if(event.isStartElement()){
String name = event.asStartElement().getName().toString();
if("title".equals(name)){
System.out.print(reader.getElementText()+":");
}
if("price".equals(name)){
System.out.print(reader.getElementText()+"\n");
}
}
num ++;
}
System.out.println(num);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}