Stax用法示例

来源:互联网 发布:java socket断点续传 编辑:程序博客网 时间:2024/06/05 16:15
package cn.hncu.jaxp.stax;

import java.io.FileReader;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;


public class StAXDemo {
/*
* 本例是Stax解析技术演示,需求同SaxDemo.demo2()
*/
public static void main(String[] args) throws Exception {
XMLInputFactory factory = XMLInputFactory.newFactory();
XMLEventReader reader = factory.createXMLEventReader(new FileReader("./xml/users.xml"));
//reader是一个迭代器,类似我们之前一直用的sc ----Scanner把流封装成迭代器
//reader迭代器中的每一个元素都是一个XMLEvent对象
while(reader.hasNext()){
XMLEvent xe = reader.nextEvent(); 
if(xe.isStartElement()){
StartElement se = xe.asStartElement();
if(se.getName().getLocalPart().equals("user")){
//读取属性值
String id = se.getAttributeByName(new QName("id") ).getValue();
System.out.println("id:"+id);
}else if(se.getName().getLocalPart().equals("name")){
//读取文本内容
Characters chs = reader.nextEvent().asCharacters(); //文本内容 是 StartElement的下一个事件对象
System.out.println("name:"+chs.getData());
}else if(se.getName().getLocalPart().equals("age")){
//读取文本内容
Characters chs = reader.nextEvent().asCharacters(); //文本内容 是 StartElement的下一个事件对象
System.out.println("age:"+chs.getData());
}
}
if(xe.isEndElement()){
EndElement ee = xe.asEndElement();
if(ee.getName().getLocalPart().equals("user")){
System.out.println("-----------------");
}
}
}

}

}



<?xml version="1.0" encoding="UTF-8" standalone="no"?><users>
<user id="A001">
<name>Jack</name>
<age>22</age>
</user>
<user id="A002">
<name>张三</name>
<age>24</age>
</user>
<user id="B001">
<name>小李</name>
<age>20</age>
</user>
<user id="B002">
<name>小张</name>
<age>28</age>
</user>
<user id="C001">
<name>刘备</name>
<age>45</age>
</user>
</users>



//结果演示


原创粉丝点击