jaxp的Sax解析
生活随笔
收集整理的這篇文章主要介紹了
jaxp的Sax解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在使用DOM解析XML時候,需要讀取整個XML文檔,在內存架構代表整個DOM樹的Document對象,從而再對XML文檔操作,如果XML文件特別大,就特別消耗內存。SAX解析允許在讀取文檔的時候,即對文檔進行處理,而不必等到整個文檔裝載完才會文檔進行操作。 解析器采用SAX方式在解析某個XML文檔時,它只要解析到XML文檔的一個組成部分,都會去調用事件處理器的一個方法,解析器在調用事件處理器的方法時,會把當前解析到的xml文件內容作為方法的參數傳遞給事件處理器。 事件處理器由程序員自定義,繼承自DefaultHandler。
舉個例子 使用sax解析下面的xml文件---cd.xml。打印出里面所有屬于UK的專輯作者 <?xml version="1.0" encoding="UTF-8"?> <CATALOG><CD><TITLE>Empire Burlesque</TITLE><ARTIST>Bob Dylan</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>Columbia</COMPANY><PRICE>10.90</PRICE><YEAR>1985</YEAR></CD><CD><TITLE>Hide your heart</TITLE><ARTIST>Bonnie Tyler</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>CBS Records</COMPANY><PRICE>9.90</PRICE><YEAR>1988</YEAR></CD><CD><TITLE>Greatest Hits</TITLE><ARTIST>Dolly Parton</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>RCA</COMPANY><PRICE>9.90</PRICE><YEAR>1982</YEAR></CD><CD><TITLE>Still got the blues</TITLE><ARTIST>Gary Moore</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>Virgin records</COMPANY><PRICE>10.20</PRICE><YEAR>1990</YEAR></CD><CD><TITLE>Eros</TITLE><ARTIST>Eros Ramazzotti</ARTIST><COUNTRY>EU</COUNTRY><COMPANY>BMG</COMPANY><PRICE>9.90</PRICE><YEAR>1997</YEAR></CD><CD><TITLE>One night only</TITLE><ARTIST>Bee Gees</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>Polydor</COMPANY><PRICE>10.90</PRICE><YEAR>1998</YEAR></CD> </CATALOG> import java.io.IOException;import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler;public class SaxParse {public static void main(String[] args) {SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();try {SAXParser saxParser = saxParserFactory.newSAXParser();MyHandler myHandler=new MyHandler();saxParser.parse("cd.xml", myHandler);} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}} }class MyHandler extends DefaultHandler{//繼承DefaultHandler,然后重寫父類方法//兩個類成員,用于在方法之間保存數據boolean flag=false;String artist;@Overridepublic void startDocument() throws SAXException {//System.out.println("MyHandler.startDocument()====>開始解析文檔"); }@Overridepublic void endDocument() throws SAXException {//System.out.println("MyHandler.endDocument()====>結束解析文檔"); }@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//System.out.println("MyHandler.startElement()====>開始解析元素");//解析到了<ARTIST>這一元素,傳遞一個信號給characters()方法,將每個作者都保存到artistif (qName.equals("ARTIST")) {flag=true;}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {//System.out.println("MyHandler.endElement()====>結束解析元素"); }@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {//System.out.println("MyHandler.characters()====>得到元素的文本");//解析到了<ARTIST>這一元素,將每個作者都保存到artistif (flag) {artist=new String(ch, start, length);flag=false;}//如果<COUNTRY>元素的文本是UK,就輸出作者名字String uk=new String(ch, start, length);if (uk.equals("UK")) {System.out.println("The artist from UK----->"+artist);} }}
舉個例子 使用sax解析下面的xml文件---cd.xml。打印出里面所有屬于UK的專輯作者 <?xml version="1.0" encoding="UTF-8"?> <CATALOG><CD><TITLE>Empire Burlesque</TITLE><ARTIST>Bob Dylan</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>Columbia</COMPANY><PRICE>10.90</PRICE><YEAR>1985</YEAR></CD><CD><TITLE>Hide your heart</TITLE><ARTIST>Bonnie Tyler</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>CBS Records</COMPANY><PRICE>9.90</PRICE><YEAR>1988</YEAR></CD><CD><TITLE>Greatest Hits</TITLE><ARTIST>Dolly Parton</ARTIST><COUNTRY>USA</COUNTRY><COMPANY>RCA</COMPANY><PRICE>9.90</PRICE><YEAR>1982</YEAR></CD><CD><TITLE>Still got the blues</TITLE><ARTIST>Gary Moore</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>Virgin records</COMPANY><PRICE>10.20</PRICE><YEAR>1990</YEAR></CD><CD><TITLE>Eros</TITLE><ARTIST>Eros Ramazzotti</ARTIST><COUNTRY>EU</COUNTRY><COMPANY>BMG</COMPANY><PRICE>9.90</PRICE><YEAR>1997</YEAR></CD><CD><TITLE>One night only</TITLE><ARTIST>Bee Gees</ARTIST><COUNTRY>UK</COUNTRY><COMPANY>Polydor</COMPANY><PRICE>10.90</PRICE><YEAR>1998</YEAR></CD> </CATALOG> import java.io.IOException;import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler;public class SaxParse {public static void main(String[] args) {SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();try {SAXParser saxParser = saxParserFactory.newSAXParser();MyHandler myHandler=new MyHandler();saxParser.parse("cd.xml", myHandler);} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}} }class MyHandler extends DefaultHandler{//繼承DefaultHandler,然后重寫父類方法//兩個類成員,用于在方法之間保存數據boolean flag=false;String artist;@Overridepublic void startDocument() throws SAXException {//System.out.println("MyHandler.startDocument()====>開始解析文檔"); }@Overridepublic void endDocument() throws SAXException {//System.out.println("MyHandler.endDocument()====>結束解析文檔"); }@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//System.out.println("MyHandler.startElement()====>開始解析元素");//解析到了<ARTIST>這一元素,傳遞一個信號給characters()方法,將每個作者都保存到artistif (qName.equals("ARTIST")) {flag=true;}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {//System.out.println("MyHandler.endElement()====>結束解析元素"); }@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {//System.out.println("MyHandler.characters()====>得到元素的文本");//解析到了<ARTIST>這一元素,將每個作者都保存到artistif (flag) {artist=new String(ch, start, length);flag=false;}//如果<COUNTRY>元素的文本是UK,就輸出作者名字String uk=new String(ch, start, length);if (uk.equals("UK")) {System.out.println("The artist from UK----->"+artist);} }}
?
轉載于:https://www.cnblogs.com/linchaohao/p/5143843.html
總結
以上是生活随笔為你收集整理的jaxp的Sax解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js002-在HTML中使用JavaSc
- 下一篇: php 判断字符串是不存在json中