原文:
http://kxml.sourceforge.net/kxml2/
kXML 2 实现了 XmlPull API。要了解关于 XmlPull 解析器及接口说明的信息,请访问
xmlpull.org。
kXML 2 基于 BSD 许可协议。
Naveen Balani 为 IBM 开发者工厂撰写了
一篇很优秀的介绍 kXML 2 的文章。
推荐的调用约定
当传递一个 XMLPull 解析器给子程序的时候,最好确保当前位置在“开始标签(如<element>)”处(以使得子程序能分析标签的属性)。后置条件通常应该是当前的位置是匹配的“结束标签(如</element>)”。
解析纯元素和纯文本内容
可以这样使用 XML Pull API 来解析一般的 XML 内容:用一个循环来推进事件,并用 switch 语句根据事件类型进行处理。然而,当使用 XML 进行数据传输时(相对于文本文档),大多数 XML 元素只包含文本或只包含其他元素(可能有更深层次的子元素)。在这些常见的情况下,可以使用 XmlPull API 的方法
nextTag 和
nextText 来显著地简化解析过程。此外,可以选择性地使用
require() 方法来断言一个确定的解析器状态。下面的范例展示了在一个具体情境下解析器方法的使用。外围元素
elements 拥有纯元素的内容;它包含的
text 元素拥有纯文本的内容:
<elements>
<text>text1</text>
<text>text2</text>
</elements>
解析代码
parser.nextTag();
parser.require(XmlPullParser.START_TAG, null, "elements");
while(parser.nextTag() == XmlPullParser.START_TAG) {
parser.require(XmlPullParser.START_TAG, null, "text");
// 处理元素内容
System.out.println("text content: "+ parser.nextText());
parser.require(XmlPullParser.END_TAG, null, "text");
}
parser.require(XmlPullParser.END_TAG, null, "elements");
nextTag() 使解析器推进到下一个开始标签或结束标签,跳过不重要的事件如:空白字符、注释、处理指令等。
nextText() 要求当前位置是开始标签,会返回相应元素的文本内容。后置条件是当前位置是结束标签。请注意,
require() 调用是可选的,他们可能会被完全忽略掉。