


在J2ME開(kāi)發(fā)中解析XML(1)
目前,XML已經(jīng)廣泛應用于數據交換領(lǐng)域,XML是基于純文本的,具有優(yōu)秀的跨平臺特性。本文將講述如何在J2ME中解析XML進(jìn)行數據傳輸。
XML寫(xiě)法比較簡(jiǎn)單,而且非常便于人來(lái)閱讀。但是必須在客戶(hù)端和服務(wù)器端有XML的解析器才可以正常通信,由于初期的移動(dòng)信息設備內存和處理器上的不足,所以在MIDP1.0中并沒(méi)有提供對XML的支持。隨著(zhù)內存和處理器的提高,對XML的支持成為了可能。在JSR182中提供了XML的解析器,但是這并不是標準MIDP中的API需要特定的實(shí)現才可以支持。幸運的是有第三方的API對解析XML提供了支持,比較有名的是kXML和nanoXML。
使用XML之前,你必須考慮好是不是必須用它來(lái)傳輸數據,因為解析XML是比較耗費資源的,尤其是在CPU和內存的資源都很寶貴的條件下。如果我們能使用DataInputStream和DataOutputStream傳輸的話(huà)就盡量不要使用XML。XML的解析器有兩種,一種是確認性的,他在解析之前會(huì )對XML的文檔進(jìn)行有效性的驗證,確保這是應用程序需要的。另一種則是非確認性的,他不做驗證工作直接進(jìn)行解析,無(wú)疑這樣的速度會(huì )快。kXML和nanoXML都是這樣的解析器。它們也存在差別,kXML是增量解析器他會(huì )一點(diǎn)一點(diǎn)的解析,這樣在解析大的文檔的時(shí)候會(huì )效率比較高。nanoXML是一步解析器,一次就把文檔解析完,如果文檔很大的話(huà),這無(wú)疑會(huì )耗費很大的內存。要使用kXML你可以從XML.org/">http://www.kXML.org 下載得到,在XML.sourceforge.net/">http://nanoXML.sourceforge.net 你可以下載nanoXML。
要使用kXML,你必須首先得到一個(gè)XMLParser實(shí)例,它用Reader作為構造器的參數:
try {
Reader r = .....;
XMLParser parser = new XMLParser( r );
}
catch( Java.io.IOException e ){
// handle exception....
}
如果你的XML文檔存儲在String內的話(huà)你可以使用ByteArrayInputStream和InputStreamReader:
String XML = "<a>some XML</a>";
ByteArrayInputStream bin =
new ByteArrayInputStream( XML.getBytes() );
XMLParser parser = new XMLParser( new InputStreamReader( bin ) );
當從網(wǎng)上接收數據的時(shí)候可以這樣:
HttpConnection conn = .....;
InputStreamReader doc =
new InputStreamReader( conn.openInputStream() );
XMLParser parser = new XMLParser( doc );
得到parser實(shí)例后我們就可以調用read方法進(jìn)行解析了,read方法會(huì )返回一個(gè)ParseEvent,通過(guò)判斷他的類(lèi)型我們就可以解析XML了。
聯(lián)系客服