原文:
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 元素拥有纯文本的内容:
解析代码
nextTag() 使解析器推进到下一个开始标签或结束标签,跳过不重要的事件如:空白字符、注释、处理指令等。 nextText() 要求当前位置是开始标签,会返回相应元素的文本内容。后置条件是当前位置是结束标签。请注意, require() 调用是可选的,他们可能会被完全忽略掉。
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>
<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");
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() 调用是可选的,他们可能会被完全忽略掉。