日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android xml defaulthandler解析,sax解析xml文件的DefaultHandler处理类

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android xml defaulthandler解析,sax解析xml文件的DefaultHandler处理类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一千年的時光,我無數次掀起歲月的帷幔,只為和你,在某一個平靜如水的日子相遇,然后相識,傾情一生,繾綣一世,好美的散文,好吧,我情愿把這個“你”當作android;),使用sax解析xml文件是我見到過的最為簡單的一種解析xml的方式了。java主要代碼:

SAXParserFactory factory =SAXParserFactory.newInstance();

SAXParser parser=factory.newSAXParser();

XMLReader xmlReader=parser.getXMLReader();

xmlReader.setContentHandler(mRSSHandler);

xmlReader.parse(new InputSource(mStream));

這里要說明的是sax使用的工廠設計模式,通過SAXParserFactory 獲取解析器parser ,在從解析器中獲得解析xml文件的xmlReader

,但是在xmlReader

讀取流式的xml文件時,需要完成一個RSSHandler的設置,RSSHandler是繼承的DefaultHandler,所以這篇文章著重詳解使用sax解析xml文件的DefaultHandler處理類。這里我以解析網站的rss.xml文件為例,下面我們先看rss.xml的文件格式:

xml/html代碼:

Ubuntu11.04(10.04)安裝dos工具dosemu

http://www.ourunix.org/post/276.html

ourunix@163.com (walfred)

玩轉Linux

Mon, 16 Jan 2012 22:54:53 +0800

看完介紹之后,發現這是繼wine之后的有一款linux類win工具了,所以現在直接上文介紹dosemu在ubuntu Linux上的安裝步驟及使用其運行dos游戲:魂斗羅~~~

RSSHandler繼承的DefaultHandler處理類就是專門來解析這個文件的,看下我們必須完成的接口:

public voidstartDocument () {//開始解析文檔

}public voidendDocument () {//文檔解析結束

}public voidstartElement (String uri, String localName, String qName, Attributes attributes) {//開始解析節點

}public void characters (char[] ch, int start, intlength) {//保存節點內容

}public voidendElement (String uri, String localName, String qName) {//結束解析節點

}

一般前兩個方法,開始解析和結束解析文檔的不需要做處理外,我們的所有操作都是在解析節點部分,我們調用startElement

開始解析節點,然后調用characters 保存節點的內容,最后調用endElement ,如此循環而已,可以看下解析rss的示例:

public class RSSHandler extendsDefaultHandler {privateContext mContext;privateRSSItem mRSSItem;privateRSSDBInterface mRSSDBInterface;private final int TITLE_STATE = 1;private final int AUTHOR_STATE = 2;private final int LINK_STATE = 3;private final int DESCRIPTION_STATE = 4;private final int CATEGORY_STATE = 5;private final int PUBDATE_STATE = 6;//標記當前節點

private intcurrentState;publicRSSHandler(Context ctx){

mContext=ctx;//初始化當前節點標記為0

currentState = 0;//數據庫接口

mRSSDBInterface = newRSSDBInterface(mContext);

}public voidstartDocument () {//開始解析文檔

mRSSItem = newRSSItem();

}public voidendDocument () {//文檔解析結束

}public voidstartElement (String uri, String localName, String qName, Attributes attributes) {//開始解析節點

if (localName.equals("channel")){return;

}if (localName.equals("item")){//當遇到一個item節點時,就實例化一個RSSItem對象

mRSSItem = newRSSItem();return;

}if (localName.equals("title")){

currentState=TITLE_STATE;return;

}if (localName.equals("author")){

currentState=AUTHOR_STATE;return;

}if (localName.equals("description")){

currentState=DESCRIPTION_STATE;return;

}if (localName.equals("link")){

currentState=LINK_STATE;return;

}if (localName.equals("category")){

currentState=CATEGORY_STATE;return;

}if (localName.equals("pubDate")){

currentState=PUBDATE_STATE;return;

}

}public voidendElement (String uri, String localName, String qName) {//這是節點解析完成時調用的,這里我們遇到item的時候才調用下面的

if(localName.equals("item" && mRSSItem != null)){

ContentValues values= newContentValues();

values.put(RSSDBInfo.Columns._TITLE, mRSSItem.getTitle());

values.put(RSSDBInfo.Columns._AUTHOR, mRSSItem.getAuthor());

values.put(RSSDBInfo.Columns._CATEGORY, mRSSItem.getCategory());

values.put(RSSDBInfo.Columns._DESCRIPTION, mRSSItem.getDescription());

values.put(RSSDBInfo.Columns._LINK, mRSSItem.getLink());

values.put(RSSDBInfo.Columns._PUBDATE, mRSSItem.getPubdate());

values.put(RSSDBInfo.Columns._ISREAD, RSSUtils.ARTICALE_UNREAD);

mRSSDBInterface.insertRSStoDB(values);

}

}public void characters (char[] ch, int start, intlength) {

String theString= newString(ch, start, length);switch(currentState){caseTITLE_STATE:

mRSSItem.setTitle(theString);

currentState= 0;break;caseAUTHOR_STATE:

mRSSItem.setAuthor(theString);

currentState= 0;break;caseLINK_STATE:

mRSSItem.setLink(theString);

currentState= 0;break;caseDESCRIPTION_STATE:

mRSSItem.setDescription(theString);

currentState= 0;break;caseCATEGORY_STATE:

mRSSItem.setCategory(theString);

currentState= 0;break;casePUBDATE_STATE:

mRSSItem.setPubdate(theString);

currentState= 0;break;

}

}

}

這就SAX的工廠模式的解析。

注釋:ContentValues 是類似Map一樣的類,存儲鍵值的。

InputSource 主要就是用的解析的輸入流列。

總結

以上是生活随笔為你收集整理的android xml defaulthandler解析,sax解析xml文件的DefaultHandler处理类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。