STAX是sax的升级版,现主要用于安卓
与sax一样,也是用来读的。
stax创建XMLReader两步:
XMLInputFactory factory = XMLInputFactory.newFactory();
XMLEventReader reader = factory.createXMLEventReader( new FileReader("./xml5/users.xml"));
stax是用类似于迭代器的思想来做的,用一个while(reader.hasNext()){}
来做。
具体实现代码如下:
StaxDemo
package cn.hncu.sax_stax
import java.io.FileNotFoundException
import java.io.FileReader
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.Characters
import javax.xml.stream.events.StartElement
import javax.xml.stream.events.XMLEvent
import org.junit.Test
public class StaxDemo {
@Test
public void staxDemo() throws FileNotFoundException, XMLStreamException{
XMLInputFactory factory = XMLInputFactory.newFactory()
XMLEventReader reader = factory.createXMLEventReader( new FileReader("./xml5/users.xml"))
while(reader.hasNext()){
XMLEvent en = reader.nextEvent()
if(en.isStartElement()){
StartElement se = en.asStartElement()
if(se.getName().getLocalPart().equals("user")){
String id = se.getAttributeByName(new QName("id")).getValue()
System.out.println("id:"+id)
}
if(se.getName().getLocalPart().equals("name")){
Characters chs = reader.nextEvent().asCharacters()
System.out.println("name:"+chs)
}
if(se.getName().getLocalPart().equals("age")){
Characters chs = reader.nextEvent().asCharacters()
System.out.println("age:"+chs)
}
}
if(en.isEndElement()){
if( en.asEndElement().getName().getLocalPart().equals("user") ){
System.out.println("----------------------")
}
}
}
}
}
users.xml
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="A001">
<name>Jack</name>
<age>25</age>
</user>
<user id="A002">
<name>张三</name>
<age>80</age>
</user>
<user id="C001">
<name>李四</name>
<age>32</age>
</user>
<user id="C003">
<name>玛丽</name>
<age>24</age>
</user>
</users>