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;iEverydayItalian 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的资料请关注毛票票其它相关文章!