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