越?越多的?用程式使用XML交??息。譬如,以 CLDC ?基?的?用程式 需要去?理 XML 文件,甚至? Html ??也??很有可能??成?一?以 XML ?基?的格式。而?意味著?一???伺服器??一???而取出?料??需要分析 XML 的技?。
XML就是「可?展???言」,是一??便的、以文字?基?的方法去呈???化的?料。
越?越多的?用程式使用 XML 交??息,甚且,在一些情?下,您以 CLDC ?基?的?用程式 (?些是指在以 CLDC ?基?的架?上?行的,像是微小的手??置之?的) 需要去?理 XML 文件。之後,甚至? HTML ??也??很有可能??成?一?以 XML ?基?的格式,?? XHTML。?意味著?一???伺服器??一???而取出?料??需要分析 XML 的技?。
?找一?以 Java ?基?的 XML 分析器不?,尤其是自?有好??以 XML ?基?的的提倡?始被定?? Java ?理程序的一部分。然而,大部分的 XML 分析器?不支援在 CLDC 所提供的有限?源?境下?作。?些分析器不是使用了太多的???就是使用在 CLDC 下不能?作的 J2SETM ??。
然而,在?有??能在 CLDC ?境下?作的?放原始? XML 分析器 ── kXML 和 NanoXML。他?二者的??有些不同 ── 本文????他??者,?且提供您如何去?定哪一?是最?合您的程式需求。然而,您也??考?是否?? XML,因? XML 文件是非常冗?的。
假如您能?控制伺服器端,去使用您自己的二?位的格式去交??料才是有意?的。
假如一?以 Java ?基?的客?端?一?以 Java ?基?的伺服器端相互?通,?是相?轻易的。在???例?,使用 DataInputStream 和 DataOutputStream ??,以?便的方法??取?料。
基本的 XML 分析器型?
基本的 XML 分析器型?有??:??性的和非??性的。
一???性的分析器透?一?文件型?定?或概要 (schema) ??一份 XML 文件,以?保?份文件的?容是程式所?期的。??要求???低?理的速度。一?非??性的分析器跳???步?,只保??? XML 文件是合乎基本格式的 (well-formed),?而言之,它遵守一般 XML 文件必?遵守的??。kXML 和 NanoXML 二者都是非??性的分析器。
非??性的分析器
XML 分析器也能以他?如何?理和呈? XML 文件??分。
NanoXML 是一??一步? (single-step) 分析器。?定一份文件,NanoXML 以一??一的?作分析它,???份文件以一???的???回。kXML,相?之下,是一?多步?的 (multi-step) 的分析器 ── 一次分析文件的一??域。
???方法各有利弊,假如您正在?理一份?大的文件,?一步?的方法使用?多的???,因?全部的文件都?存在???中。但是?一步?的方法??有效率,假如您需要穿越?份文件很多次。多步?的方法能???易的?理?大的文件,但是您必?做?多的簿? (bookkeeping) 去追?您在文件的哪一?地方。
■ ?如何使用 kXML 呢?
? http://www.kxml.org/ 下? kXML 原始?,?且? kXML ??包含?您的?用程式。?不是所有的??都是需要的,所以只要下?包含最小 kXML 的 ZIP ?。在安?完???案後,新增下面的引入?述到您的程式中。
import org.kxml.*;
import org.kxml.parser.*;
?您??好去分析一份文件?,?生一? XmlParser ????,?入一?字元 (character) 流?唯一的??。
try {
Reader r = .....;
XmlParser parser = new XmlParser( r );
}
catch( java.io.IOException e ){
// handle exception....
}
假如您的文件是以字串被?存,?例??,您可以藉著??字串成?一?位元? (byte) ?列??取它,然後,?合 InputStreamReader 和 ByteArrayInputStream:
// ?取字串 (exception handling omitted)
String xml = "some xml";
ByteArrayInputStream bin =
new ByteArrayInputStream( xml.getBytes() );
XmlParser parser = new XmlParser( new InputStreamReader( bin ) );
然而,更可能?生的情?是,??路接收一份文件,?例??,在 CLDC 的通常??架? (GCF),您使用 MIDP ?建支援 HTTP 的???做?件事,然後您?使用 GCF 回?的?入流 (input stream),?且??它成?字元流 (character stream):
// Read from web (exception handling omitted)
HttpConnection conn = .....;
InputStreamReader doc =
new InputStreamReader( conn.openInputStream() );
XmlParser parser = new XmlParser( doc );
析器被?生後,您呼叫它的 read 方法去?取文件分?的??。read 方法?文件的每一?元件回?一? ParseEvent 物件: