Android API学习之XmlPullParser

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


版权声明:原创作品版权归作者所有,转载请注明出处,未经允许禁止私自印刷及出版。一经发现作者将依法追究其法律责任。

与我联:QQ群539225664


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值