您的位置:首页 > 移动开发 > Android开发

XmlPullParser解析xml文件

2016-06-30 20:34 513 查看
现在介绍我们的Pull解析的使用,知识点,理解以及它的缺点和优点

Android并未提供对Java StAX API的支持。但是,Android附带了一个pull解析器,其工作方式类似于StAX。它允许用户的应用程序代码从解析器中获取事件,这与SAX解析 器自动将事件推入处理程序相反。
PULL解析器的运行方式和SAX类似,都是基于事件的模式。不同的是,在PULL解析过程中返回的是数字,且我们需要自己获取产生的事件然后做相应的操作,而不像SAX那样由处理器触发一种事件的方法,执行我们的代码。
读取到xml的声明返回 START_DOCUMENT;
读取到xml的结束返回 END_DOCUMENT ;
读取到xml的开始标签返回 START_TAG
读取到xml的结束标签返回 END_TAG
读取到xml的文本返回 TEXT
PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。
PULL 的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结 束时,自动生成EndDocument事件。
常用的XML pull的接口和类:
XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。
XmlSerializer:它是一个接口,定义了XML信息集的序列。
XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。
XmlPullParserException:抛出单一的XML pull解析器相关的错误。


以上是我对Pull解析的理解,下面就把代码演示一下

xml文档就简单了手写了几个

<?xml version="1.0" encoding="utf-8"?>
<Books>
<Book>
<name>红楼梦</name>
<author >曹雪芹</author>
<price>15.3</price>
</Book>

<Book>
<name>三国演义</name>
<author>罗贯中</author>
<price>19.4</price>
</Book>

<Book>
<name>水浒传</name>
<author>施耐庵</author>
<price>17.4</price>
</Book>

<Book>
<name>西游记</name>
<author>吴承恩</author>
<price>12.9</price>
</Book>

</Books>


MainActivity.xml 具体步骤的操作

public class MainActivity extends Activity {
private List<Books> bList;
private Books books;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
PullXml();
}
private void PullXml() {
// TODO Auto-generated method stub
try {
// 创建工厂得到factory属性
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 通过factory属性获取parse
XmlPullParser parser = factory.newPullParser();
// 设置流
parser.setInput(getAssets().open("Books.xml"), "UTF-8");
int eventType = parser.getEventType();
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
// 开始解析元素
case XmlPullParser.START_TAG:
if("Books".equals(parser.getName())){
bList=new ArrayList<>();
}else if("Book".equals(parser.getName())){
books=new Books();
}else if("name".equals(parser.getName())){
//获取一下节点的文本
String name=parser.nextText();
books.setName(name);
}else if("author".equals(parser.getName())){
//获取一下节点的文本
String author=parser.nextText();
books.setAuthor(author);
}else if("price".equals(parser.getName())){
//获取一下节点的文本
String price=parser.nextText();
books.setPrice(Float.valueOf(price));
}
break;
case XmlPullParser.END_TAG:
if("Book".equals(parser.getName())){
bList.add(books);
}
break;
}
//把指针移动到下一个节点,并返回节点的事件类型
eventType = parser.next();
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Books book : bList) {
Log.i("TAG", book.toString());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml android java api 应用