Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

使用NanoXml解析xml

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

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

文章
Amazing1100 在 09 Jul 2012 创建
最后由 hamishwillee 在 27 Jun 2013 编辑

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 例程 下载

相关链接

This page was last modified on 27 June 2013, at 03:58.
168 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×