Android API学习之XmlPullParser
公共方法:
pulic abstarct int getEventType()
方法功能描述:
返回当前事件类型(事件类型包括START_TAG, END_TAG, TEXT, START_DOCUMENT,END_DOCUMENT等等)
public abstarct String nextText()
方法功能描述:
如果当前事件是START_TAG,并且下一个元素是TEXT,该方法将返回元素包含的内容;
如果下一个事件END_TAG,该方法将返回空字符串,另外的情况将抛出异常。如果调用方法成功解析器将被自动移动到END_TAG位置
这个方法即可以用来解析空元素也可以用来解析非空元素,例如:
1. <tag>foo</tag>(这个表示非空元素)
2. <tag></tag>(这个表示空元素,<tag/>和它相同)
它们可以用相同的代码来解析
p.nextTag();
p.requireEvent(p.START_TAG, "", "tag");
String content = p.nextText();
p.requireEvent(p.END_TAG, "", "tag");
这个方法和nextTag方法一起使用可以很容易的解析没有复杂内容的xml。
方法的内容实现原理如下:
if(getEventType() != START_TAG) {
throw new XmlPullParserException("parser must be on START_TAG to read next text", this, null);
}
int eventType = next();
if(eventType == TEXT) {
String result = getText();
eventType = next();
if(eventType != END_TAG) {
throw new XmlPullParserException("event TEXT it must be immediately followed by END_TAG", this, null);
}
return result;
}
else if(eventType == END_TAG) {
return "";
}
else {
throw new XmlPullParserException("parser must be on START_TAG or TEXT to read text", this, null);
}
警告:在API 14版本以前,XmlPullParser是通过android.util.Xml来获取,因此调用这个方法成功之后,解析器有可能无法被自动移动到END_TAG位置,但是你可以利用手动的方式来实现
String text = xpp.nextText();
if (xpp.getEventType() != XmlPullParser.END_TAG) {
xpp.next();
}
可能抛出的异常:
XmlPullParserException
IOException
public abstract int next ()
方法功能描述:
获取下一个解析事件,元素内容将被合并在一起,只有一个TEXT事件必须返回所有的元素内容(注释和处理指令会被忽略,实体引用必须能够展开,否则解析器将会抛出异常),如果元素内容为空,解析器将不会上报TEXT事件
空元素(比如<tag/>) 解析过程中会上报两个分离的START_TAG, END_TAG事件,无内容元素 <tag></tag>也一样
可能抛出的异常:
XmlPullParserException
IOException