克服android平臺SAX解析錯(cuò)誤的方法
【專利摘要】一種克服android平臺SAX解析錯(cuò)誤的方法,其特征在于,包括以下步驟:(a)使用StringBuilder作為接收元素值的存儲器;(b)開始收集新的標(biāo)簽的數(shù)據(jù)時(shí),先清空歷史數(shù)據(jù);(c)在事件處理部分進(jìn)行拼接標(biāo)簽的值。本發(fā)明的優(yōu)點(diǎn)是:決了android平臺下應(yīng)用開發(fā)過程中用SAX解析XML數(shù)據(jù)不全的問題,使得開發(fā)者可以使用本發(fā)明從XML數(shù)據(jù)中獲取完整的數(shù)據(jù)。
【專利說明】克服android平臺SAX解析錯(cuò)誤的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種克服android平臺SAX解析錯(cuò)誤的方法,適用于android系統(tǒng)應(yīng)用程序開發(fā)領(lǐng)域,在應(yīng)用開發(fā)過程中如果涉及到XML文件的解析,SAX解析是一種方式,解析過程中可能會遇到解析錯(cuò)誤的情況,本技術(shù)針對解析時(shí)獲取標(biāo)簽數(shù)據(jù)不全的問題提供了一種解決技術(shù)方案。
【背景技術(shù)】
[0002]XML是W3C制定的一組規(guī)范,用來定義標(biāo)記語言,其主要優(yōu)點(diǎn)是可擴(kuò)展性,從它的誕生到現(xiàn)在,已經(jīng)得到了人們廣泛的支持與應(yīng)用。
[0003]所謂XML文件的解析是指:把代表XML文檔的一個(gè)無結(jié)構(gòu)的字符序列轉(zhuǎn)換為滿足XML語法的結(jié)構(gòu)化組件的過程。
[0004]SAX (Simple API for XML) XML簡單應(yīng)用程序接口是一個(gè)公共的基于事件的XML文檔解析標(biāo)準(zhǔn)。它以事件作為解析XML文件的模式,它將XML文件轉(zhuǎn)化成一系列的事件,由不同的事件處理器來決定如何處理。
[0005]SAX的工作原理簡單地說就是對文檔進(jìn)行順序掃描,當(dāng)掃描到文檔(document)開始與結(jié)束、元素(element)開始與結(jié)束、文檔(document)結(jié)束等地方時(shí)通知事件處理函數(shù),由事件處理函數(shù)做相應(yīng)動作,然后繼續(xù)同樣的掃描,直至文檔結(jié)束。
[0006]SAX是一種占用內(nèi)存少且解析速度快的解析器,它采用的是事件啟動,它不需要解析完整個(gè)文檔,而是按照內(nèi)容順序看文檔某個(gè)部分是否符合xml語法,如果符合就觸發(fā)相應(yīng)的事件,所謂的事件就是些回調(diào)方法(callback),這些方法定義在ContentHandler中。下面是其主要方法:
startDocument:當(dāng)遇到文檔的時(shí)候就觸發(fā)這個(gè)事件調(diào)用這個(gè)方法可以在其中做些預(yù)處理工作。
[0007]startElement: (String namespaceURI, String 1calName, StringqName, Attributes atts)當(dāng)遇開始標(biāo)簽的時(shí)候就會觸發(fā)這個(gè)方法。
[0008]endElement (String uri, String 1calName, String name):當(dāng)遇到結(jié)束標(biāo)簽時(shí)觸發(fā)這個(gè)事件,調(diào)用此法可以做些善后工作。
[0009]charachers (char [] ch, int start, int length):當(dāng)遇到 xml 內(nèi)容時(shí)觸發(fā)這個(gè)方法,用 new String (ch, start, length)可以接受內(nèi)容。
[0010]......。
[0011]一般情況下,上面的解析過程是沒有問題的,解析會正確執(zhí)行。但是,偶爾會發(fā)生錯(cuò)誤,一般都認(rèn)為SAX解析過程大致如下:
startDocument -> startElement -> characters -> endElement ->endDocument ;
startElement讀取起始標(biāo)簽,endElement讀取結(jié)束標(biāo)簽,characters呢?是讀取其值,這沒錯(cuò),但是一般都以為characters只執(zhí)行一次,并且一次就讀取了全部內(nèi)容。錯(cuò)就錯(cuò)在這!
characters 是很有可能會執(zhí)行多次的,在解析 <url>http://img7.ph.126.net/xthf6Cci0opDhbEj2nPB3A==/6598208860702643437.jpg〈/url> 時(shí),就曾發(fā)現(xiàn) characters 執(zhí)行了兩次,將內(nèi)容 〃http://img7.ph.126.net/xthf6Cci0opDhbEj2nPB3A==/6598208860702643437.jpg〃分兩次讀取,用上面那種方式的最終結(jié)果就是url = http://img7.ph.126.net/xthf6CciOopDhbE j2nPB3A==/6598 了,那應(yīng)用中使用這個(gè)URL地址讀取圖片時(shí)就會出錯(cuò)。
【發(fā)明內(nèi)容】
[0012]本發(fā)明目的是提供一種克服android平臺SAX解析錯(cuò)誤的方法,在于解決android平臺應(yīng)用中使用SAX解析XML遇到的解析數(shù)據(jù)不全的問題。
[0013]本發(fā)明的技術(shù)方案是:以智能操作系統(tǒng)android為基礎(chǔ),以SAX為解析XML技術(shù)方式。整體解決思路為將XML的解析后的數(shù)據(jù)進(jìn)行對應(yīng)的正確的拼接,從而使解析后的數(shù)據(jù)完整。
[0014]本發(fā)明的優(yōu)點(diǎn)是:決了 android平臺下應(yīng)用開發(fā)過程中用SAX解析XML數(shù)據(jù)不全的問題,使得開發(fā)者可以使用本發(fā)明從XML數(shù)據(jù)中獲取完整的數(shù)據(jù)。
【具體實(shí)施方式】
[0015]本發(fā)明的實(shí)施方法包括以下步驟:
(a)使用StringBuilder作為接收元素值的存儲器;
(b)開始收集新的標(biāo)簽的數(shù)據(jù)時(shí),先清空歷史數(shù)據(jù);
(c)在事件處理部分進(jìn)行拼接標(biāo)簽的值。
【權(quán)利要求】
1.一種克服android平臺SAX解析錯(cuò)誤的方法,其特征在于,包括以下步驟:Ca)使用StringBuilder作為接收元素值的存儲器;(b)開始收集新的標(biāo)簽的數(shù)據(jù)時(shí),先清空歷史數(shù)據(jù);(c)在事件處理部分進(jìn)行拼接標(biāo)簽的值。
【文檔編號】G06F9/44GK103699375SQ201310636216
【公開日】2014年4月2日 申請日期:2013年12月3日 優(yōu)先權(quán)日:2013年12月3日
【發(fā)明者】顧微微 申請人:青島海爾軟件有限公司