Java Stax解析XML示例
packageorg.itat.stax;
importjava.io.IOException;
importjava.io.InputStream;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.stream.EventFilter;
importjavax.xml.stream.FactoryConfigurationError;
importjavax.xml.stream.XMLEventReader;
importjavax.xml.stream.XMLInputFactory;
importjavax.xml.stream.XMLOutputFactory;
importjavax.xml.stream.XMLStreamConstants;
importjavax.xml.stream.XMLStreamException;
importjavax.xml.stream.XMLStreamReader;
importjavax.xml.stream.XMLStreamWriter;
importjavax.xml.stream.events.XMLEvent;
importjavax.xml.transform.OutputKeys;
importjavax.xml.transform.Result;
importjavax.xml.transform.Transformer;
importjavax.xml.transform.TransformerConfigurationException;
importjavax.xml.transform.TransformerException;
importjavax.xml.transform.TransformerFactory;
importjavax.xml.transform.TransformerFactoryConfigurationError;
importjavax.xml.transform.dom.DOMSource;
importjavax.xml.transform.stream.StreamResult;
importjavax.xml.xpath.XPath;
importjavax.xml.xpath.XPathConstants;
importjavax.xml.xpath.XPathExpressionException;
importjavax.xml.xpath.XPathFactory;
importorg.junit.Test;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.NodeList;
importorg.xml.sax.SAXException;
publicclassTestStax{
@Test
publicvoidtest01(){
XMLInputFactoryfactory=XMLInputFactory.newInstance();
InputStreamis=null;
try{
is=TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLStreamReaderreader=factory.createXMLStreamReader(is);
while(reader.hasNext()){
inttype=reader.next();
//判断节点类型是否是开始或者结束或者文本节点,之后根据情况及进行处理
if(type==XMLStreamConstants.START_ELEMENT){
System.out.println(reader.getName());
}elseif(type==XMLStreamConstants.CHARACTERS){
System.out.println(reader.getText().trim());
}elseif(type==XMLStreamConstants.END_ELEMENT){
System.out.println("/"+reader.getName());
}
}
}catch(XMLStreamExceptione){
e.printStackTrace();
}finally{
try{
if(is!=null)is.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
@Test
publicvoidtest02(){
XMLInputFactoryfactory=XMLInputFactory.newInstance();
InputStreamis=null;
try{
is=TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLStreamReaderreader=factory.createXMLStreamReader(is);
while(reader.hasNext()){
inttype=reader.next();
if(type==XMLStreamConstants.START_ELEMENT){
Stringname=reader.getName().toString();
if(name.equals("book")){
System.out.println(reader.getAttributeName(0)+":"+reader.getAttributeValue(0));
}
}
}
}catch(XMLStreamExceptione){
e.printStackTrace();
}finally{
try{
if(is!=null)is.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
@Test
publicvoidtest03(){
XMLInputFactoryfactory=XMLInputFactory.newInstance();
InputStreamis=null;
try{
is=TestStax.class.getClassLoader().getResourceAsStream("books.xml");
XMLStreamReaderreader=factory.createXMLStreamReader(is);
while(reader.hasNext()){
inttype=reader.next();
if(type==XMLStreamConstants.START_ELEMENT){
Stringname=reader.getName().toString();
if(name.equals("title")){
System.out.print(reader.getElementText()+":");
}
if(name.equals("price")){
System.out.print(reader.getElementText()+"\n");
}
}
}
}catch(XMLStreamExceptione){
e.printStackTrace();
}finally{
try{
if(is!=null)is.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
@Test
publicvoidtest04(){
XMLInputFactoryfactory=XMLInputFactory.newInstance();
InputStreamis=null;
try{
is=TestStax.class.getClassLoader().getResourceAsStream("books.xml");
//基于迭代模型的操作方式
XMLEventReaderreader=factory.createXMLEventReader(is);
intnum=0;
while(reader.hasNext()){
//通过XMLEvent来获取是否是某种节点类型
XMLEventevent=reader.nextEvent();
if(event.isStartElement()){
//通过event.asxxx转换节点
Stringname=event.asStartElement().getName().toString();
if(name.equals("title")){
System.out.print(reader.getElementText()+":");
}
if(name.equals("price")){
System.out.print(reader.getElementText()+"\n");
}
}
num++;
}
System.out.println(num);
}catch(XMLStreamExceptione){
e.printStackTrace();
}finally{
try{
if(is!=null)is.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
@Test
publicvoidtest05(){
XMLInputFactoryfactory=XMLInputFactory.newInstance();
InputStreamis=null;
try{
is=TestStax.class.getClassLoader().getResourceAsStream("books.xml");
//基于Filter的过滤方式,可以有效的过滤掉不用进行操作的节点,效率会高一些
XMLEventReaderreader=factory.createFilteredReader(factory.createXMLEventReader(is),
newEventFilter(){
@Override
publicbooleanaccept(XMLEventevent){
//返回true表示会显示,返回false表示不显示
if(event.isStartElement()){
Stringname=event.asStartElement().getName().toString();
if(name.equals("title")||name.equals("price"))
returntrue;
}
returnfalse;
}
});
intnum=0;
while(reader.hasNext()){
//通过XMLEvent来获取是否是某种节点类型
XMLEventevent=reader.nextEvent();
if(event.isStartElement()){
//通过event.asxxx转换节点
Stringname=event.asStartElement().getName().toString();
if(name.equals("title")){
System.out.print(reader.getElementText()+":");
}
if(name.equals("price")){
System.out.print(reader.getElementText()+"\n");
}
}
num++;
}
System.out.println(num);
}catch(XMLStreamExceptione){
e.printStackTrace();
}finally{
try{
if(is!=null)is.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
@Test
publicvoidtest06(){
InputStreamis=null;
try{
is=TestStax.class.getClassLoader().getResourceAsStream("books.xml");
//创建文档处理对象
DocumentBuilderdb=DocumentBuilderFactory.newInstance().newDocumentBuilder();
//通过DocumentBuilder创建doc的文档对象
Documentdoc=db.parse(is);
//创建XPath
XPathxpath=XPathFactory.newInstance().newXPath();
//第一个参数就是xpath,第二参数就是文档
NodeListlist=(NodeList)xpath.evaluate("//book[@category='WEB']",doc,XPathConstants.NODESET);
for(inti=0;i
EverydayItalian
GiadaDeLaurentiis
2005
30.00
HarryPotter
JK.Rowling
2005
29.99
XQueryKickStart
JamesMcGovern
PerBothner
KurtCagle
JamesLinn
VaidyanathanNagarajan
2003
49.99
LearningXML
ErikT.Ray
2003
39.95
以上就是JavaStax解析XML示例的详细内容,更多关于Java解析XML的资料请关注毛票票其它相关文章!