Java Stax解析XML示例
package org.itat.stax;import java.io.IOException;import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.stream.EventFilter;import javax.xml.stream.FactoryConfigurationError;import javax.xml.stream.XMLEventReader;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLOutputFactory;import javax.xml.stream.XMLStreamConstants;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamReader;import javax.xml.stream.XMLStreamWriter;import javax.xml.stream.events.XMLEvent;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerException;import javax.xml.transform.TransformerFactory;import javax.xml.transform.TransformerFactoryConfigurationError;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import javax.xml.xpath.XPath;import javax.xml.xpath.XPathConstants;import javax.xml.xpath.XPathExpressionException;import javax.xml.xpath.XPathFactory;import org.junit.Test;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class TestStax { @Test public void test01() { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream is = null; try { is = TestStax.class.getClassLoader().getResourceAsStream('books.xml'); XMLStreamReader reader = factory.createXMLStreamReader(is); while(reader.hasNext()) {int type = reader.next();//判斷節(jié)點(diǎn)類(lèi)型是否是開(kāi)始或者結(jié)束或者文本節(jié)點(diǎn),之后根據(jù)情況及進(jìn)行處理if(type==XMLStreamConstants.START_ELEMENT) { System.out.println(reader.getName());} else if(type==XMLStreamConstants.CHARACTERS) { System.out.println(reader.getText().trim());} else if(type==XMLStreamConstants.END_ELEMENT) { System.out.println('/'+reader.getName());} } } catch (XMLStreamException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } } @Test public void test02() { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream is = null; try { is = TestStax.class.getClassLoader().getResourceAsStream('books.xml'); XMLStreamReader reader = factory.createXMLStreamReader(is); while(reader.hasNext()) {int type = reader.next();if(type==XMLStreamConstants.START_ELEMENT) { String name = reader.getName().toString(); if(name.equals('book')) { System.out.println(reader.getAttributeName(0)+':'+reader.getAttributeValue(0)); }} } } catch (XMLStreamException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } } @Test public void test03() { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream is = null; try { is = TestStax.class.getClassLoader().getResourceAsStream('books.xml'); XMLStreamReader reader = factory.createXMLStreamReader(is); while(reader.hasNext()) {int type = reader.next();if(type==XMLStreamConstants.START_ELEMENT) { String name = reader.getName().toString(); if(name.equals('title')) { System.out.print(reader.getElementText()+':'); } if(name.equals('price')) { System.out.print(reader.getElementText()+'n'); }} } } catch (XMLStreamException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } } @Test public void test04() { 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()) {//通過(guò)XMLEvent來(lái)獲取是否是某種節(jié)點(diǎn)類(lèi)型XMLEvent event = reader.nextEvent();if(event.isStartElement()) { //通過(guò)event.asxxx轉(zhuǎn)換節(jié)點(diǎn) String name = 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 (XMLStreamException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } } @Test public void test05() { XMLInputFactory factory = XMLInputFactory.newInstance(); InputStream is = null; try { is = TestStax.class.getClassLoader().getResourceAsStream('books.xml'); //基于Filter的過(guò)濾方式,可以有效的過(guò)濾掉不用進(jìn)行操作的節(jié)點(diǎn),效率會(huì)高一些 XMLEventReader reader = factory.createFilteredReader(factory.createXMLEventReader(is), new EventFilter() { @Override public boolean accept(XMLEvent event) { //返回true表示會(huì)顯示,返回false表示不顯示 if(event.isStartElement()) {String name = event.asStartElement().getName().toString();if(name.equals('title')||name.equals('price')) return true; } return false; } }); int num = 0; while(reader.hasNext()) {//通過(guò)XMLEvent來(lái)獲取是否是某種節(jié)點(diǎn)類(lèi)型XMLEvent event = reader.nextEvent();if(event.isStartElement()) { //通過(guò)event.asxxx轉(zhuǎn)換節(jié)點(diǎn) String name = 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 (XMLStreamException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } } @Test public void test06() { InputStream is = null; try { is = TestStax.class.getClassLoader().getResourceAsStream('books.xml'); //創(chuàng)建文檔處理對(duì)象 DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); //通過(guò)DocumentBuilder創(chuàng)建doc的文檔對(duì)象 Document doc = db.parse(is); //創(chuàng)建XPath XPath xpath = XPathFactory.newInstance().newXPath(); //第一個(gè)參數(shù)就是xpath,第二參數(shù)就是文檔 NodeList list = (NodeList)xpath.evaluate('//book[@category=’WEB’]', doc,XPathConstants.NODESET); for(int i=0;i<list.getLength();i++) {//遍歷輸出相應(yīng)的結(jié)果Element e = (Element)list.item(i);System.out.println(e.getElementsByTagName('title').item(0).getTextContent()); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XPathExpressionException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } } @Test public void test07() { try { XMLStreamWriter xsw = XMLOutputFactory.newInstance().createXMLStreamWriter(System.out); xsw.writeStartDocument('UTF-8','1.0'); xsw.writeEndDocument(); String ns = 'http://11:dd'; xsw.writeStartElement('nsadfsadf','person',ns); xsw.writeStartElement(ns,'id'); xsw.writeCharacters('1'); xsw.writeEndElement(); xsw.writeEndElement(); xsw.flush(); xsw.close(); } catch (XMLStreamException e) { e.printStackTrace(); } catch (FactoryConfigurationError e) { e.printStackTrace(); } } @Test public void test08() { InputStream is = null; try { is = TestStax.class.getClassLoader().getResourceAsStream('books.xml'); //創(chuàng)建文檔處理對(duì)象 DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); //通過(guò)DocumentBuilder創(chuàng)建doc的文檔對(duì)象 Document doc = db.parse(is); //創(chuàng)建XPath XPath xpath = XPathFactory.newInstance().newXPath(); Transformer tran = TransformerFactory.newInstance().newTransformer(); tran.setOutputProperty(OutputKeys.ENCODING,'UTF-8'); tran.setOutputProperty(OutputKeys.INDENT, 'yes'); //第一個(gè)參數(shù)就是xpath,第二參數(shù)就是文檔 NodeList list = (NodeList)xpath.evaluate('//book[title=’Learning XML’]', doc,XPathConstants.NODESET); //獲取price節(jié)點(diǎn) Element be = (Element)list.item(0); Element e = (Element)(be.getElementsByTagName('price').item(0)); e.setTextContent('333.9'); Result result = new StreamResult(System.out); //通過(guò)tranformer修改節(jié)點(diǎn) tran.transform(new DOMSource(doc), result); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XPathExpressionException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } finally { try {if(is!=null) is.close(); } catch (IOException e) {e.printStackTrace(); } } }}
<?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>
以上就是Java Stax解析XML示例的詳細(xì)內(nèi)容,更多關(guān)于Java 解析XML的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. Python如何批量生成和調(diào)用變量2. ASP.NET MVC實(shí)現(xiàn)橫向展示購(gòu)物車(chē)3. ASP.Net Core對(duì)USB攝像頭進(jìn)行截圖4. .net如何優(yōu)雅的使用EFCore實(shí)例詳解5. ASP.Net Core(C#)創(chuàng)建Web站點(diǎn)的實(shí)現(xiàn)6. python 爬取京東指定商品評(píng)論并進(jìn)行情感分析7. python基礎(chǔ)之匿名函數(shù)詳解8. Python獲取B站粉絲數(shù)的示例代碼9. ajax動(dòng)態(tài)加載json數(shù)據(jù)并詳細(xì)解析10. 通過(guò)CSS數(shù)學(xué)函數(shù)實(shí)現(xiàn)動(dòng)畫(huà)特效
