×
Namespaces

Variants
Actions
Revision as of 07:12, 2 August 2012 by hamishwillee (Talk | contribs)

使用NanoXml解析xml

From Nokia Developer Wiki
Jump to: navigation, search
WP Metro Icon Chinese.png
Article Metadata

代码示例
兼容于
平台:
Series 40

文章
Amazing1100 在 09 Jul 2012 创建
最后由 hamishwillee 在 02 Aug 2012 编辑

Contents

Introduction

NanoXML是一个能在CLDC环境(手机环境)下运行的开放源代码非确认性(不做验证工作直接进行解析)的XML 分析器。Nanoxml是一步解析器(非常小6KB的XML解析器),一次就把文档解析完并以一个树状的结构传回。

在 Java ME平台中有很多用于解析XMl的API:

  • ASXMLP 020308
  • kXML 2.0 alpha
  • kXML 1.2
  • MinML 1.7
  • NanoXML 1.6.4
  • TinyXML 0.7 (disabled broken link to www.gibaradunn.srac.org/tiny/)
  • Xparse-J 1.1

尽管对于xml的解析 有这么多可选,但是NanoXML使用是比较简单,再加上其代码非常精简,高效,占用存储空间小,所以是我们在开发MIDlet时很好的选择。*

原理

每个xml文件被解析成一个 kXMLElement,里面包含 标签名(name),标签内容(contents),子标签(children:List<XmlElement>),属性<attributes:Map>,然后子标签递归下去,就能遍历整个xml文件了。 主要递归的方法是一个叫做scanElement(XmlElement)的方法。


使用

下面以一个例子演示如何使用NanoXML来解析一个XML文件。

有如下一个XML,保存了两个user的信息。

<?xml version="1.0" ?>
<Users>
<user Type="vip">
<name>Zhang Jing</name>
<age>22</age>
<sex>man</sex>
<ID>0001</ID>
</user>
<user Type="common">
<name>Liu Bi</name>
<age>42</age>
<sex>woman</sex>
<ID>0003</ID>
</user>
</Users>


解析后显示如下:

Nano xml demo 1.png Nano xml demo 2.png


首先新开一个线程, 使用InputStreamReader 把xml以流的形式读取进来。 element.parseFromReader(input) 这一句就是真正的对xml文件的解析,解析后的数据保存在了kXMLElement 中。


		new Thread(){
public void run(){
InputStreamReader input = new InputStreamReader(getClass().getResourceAsStream("/xml_demo_1.xml"));
kXMLElement element = new kXMLElement();
try {
element.parseFromReader(input);
readData(element);
} catch (kXMLParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();


接下来就是从kXMLElement 中取出我们需要的信息:

	public void readData(kXMLElement element) {
Enumeration e = element.enumerateChildren();
 
kXMLElement childElement = null;
int i = 0;
while(e.hasMoreElements()) {
childElement = (kXMLElement) e.nextElement();
if(childElement.getTagName().equals("user")) {
this.form.append(new StringItem("New User : ", Integer.toString(++i) ));
readData(childElement);
} else {
this.form.append(new StringItem(childElement.getTagName(), childElement.getContents()));
}
}
}


例程下载

 #  XMLReadDemo.zip 例程 下载

相关链接

105 page views in the last 30 days.
×