日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

jaxp的Sax解析

發(fā)布時(shí)間:2025/4/9 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jaxp的Sax解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在使用DOM解析XML時(shí)候,需要讀取整個(gè)XML文檔,在內(nèi)存架構(gòu)代表整個(gè)DOM樹的Document對象,從而再對XML文檔操作,如果XML文件特別大,就特別消耗內(nèi)存。SAX解析允許在讀取文檔的時(shí)候,即對文檔進(jìn)行處理,而不必等到整個(gè)文檔裝載完才會(huì)文檔進(jìn)行操作。 解析器采用SAX方式在解析某個(gè)XML文檔時(shí),它只要解析到XML文檔的一個(gè)組成部分,都會(huì)去調(diào)用事件處理器的一個(gè)方法,解析器在調(diào)用事件處理器的方法時(shí),會(huì)把當(dāng)前解析到的xml文件內(nèi)容作為方法的參數(shù)傳遞給事件處理器。 事件處理器由程序員自定義,繼承自DefaultHandler。
舉個(gè)例子 使用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,然后重寫父類方法//兩個(gè)類成員,用于在方法之間保存數(shù)據(jù)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()====>結(jié)束解析文檔"); }@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {//System.out.println("MyHandler.startElement()====>開始解析元素");//解析到了<ARTIST>這一元素,傳遞一個(gè)信號給characters()方法,將每個(gè)作者都保存到artistif (qName.equals("ARTIST")) {flag=true;}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {//System.out.println("MyHandler.endElement()====>結(jié)束解析元素"); }@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {//System.out.println("MyHandler.characters()====>得到元素的文本");//解析到了<ARTIST>這一元素,將每個(gè)作者都保存到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);} }}

?

轉(zhuǎn)載于:https://www.cnblogs.com/linchaohao/p/5143843.html

總結(jié)

以上是生活随笔為你收集整理的jaxp的Sax解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。