android(14)_解析xml文件1_pull
来源:互联网 发布:迅捷网络哪里能下载 编辑:程序博客网 时间:2024/05/21 17:04
除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。
Pull解析器的运行方式与 SAX 解析器相似。
它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。
事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。
当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。
Pull解析器的源码及文档下载网址:http://www.xmlpull.org/
Strings.xml
<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">lession03_xml</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="btn_sax">采用sax解析xml文件</string> <string name="btn_dom">采用dom解析方式解析</string> <string name="btn_pull">采用pull解析方式解析</string> <string name="btn_cpull">采用pull解析生成xml文件</string></resources>
activity_xml.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".XmlActivity" > <Button android:id="@+id/button_cpull" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_pull" android:layout_alignRight="@+id/btn_pull" android:layout_below="@+id/btn_pull" android:layout_marginTop="20dp" android:text="@string/btn_cpull" /> <Button android:id="@+id/btn_sax" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:text="@string/btn_sax" /> <Button android:id="@+id/btn_pull" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_dom" android:layout_alignRight="@+id/btn_dom" android:layout_below="@+id/btn_dom" android:layout_marginTop="68dp" android:text="@string/btn_pull" /> <Button android:id="@+id/btn_dom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/btn_sax" android:layout_alignRight="@+id/btn_sax" android:layout_below="@+id/btn_sax" android:layout_marginTop="60dp" android:text="@string/btn_dom" /></RelativeLayout>
Person.java
package com.example.lession03_xml.domain;import java.io.Serializable;/** * 创建一个javabean存储xml解析的数据 * * @author chenhj * */public class Person implements Serializable {/** * */private static final long serialVersionUID = 1L;private int id;private String name;private short age;public Person() {super();// TODO Auto-generated constructor stub}public Person(int id, String name, short age) {super();this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public short getAge() {return age;}public void setAge(short age) {this.age = age;}}
XMLPullService.java
package com.example.lession03_xml.service;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;import android.R.bool;import android.os.Environment;import android.provider.ContactsContract.CommonDataKinds.Event;import android.util.Xml;import com.example.lession03_xml.domain.Person;/** * 采用pull解析xml文件 事件驱动 开始,结束元素事件 产生的事件是一个数字,通过switch语句体现 * * @author zhaoyazhi * */public class XMLPullService {public List<Person> getPerson(InputStream inputStream) throws Exception {List<Person> persons = null;Person person = null;// android提供一个类XmlPullParser,得到pull解析器XmlPullParser pullParser = Xml.newPullParser();// 设置要进行解析的内容,不是立刻发生,调用才发生pullParser.setInput(inputStream, "utf-8");/* <?xml version="1.0" encoding="UTF-8"?> */// 触发第一个事件 用数字形式表示 开始文档事件int event = pullParser.getEventType();// 不等于文档的结束时间while (event != XmlPullParser.END_DOCUMENT) {// 属于开始文档事件switch (event) {case XmlPullParser.START_DOCUMENT:persons = new ArrayList<Person>();break;case XmlPullParser.START_TAG:/* <persons> */if ("person".equals(pullParser.getName())) {/* <person id="23"> */int id = new Integer(pullParser.getAttributeValue(0));person = new Person();person.setId(id);}if (person != null) {/* <name> */if ("name".equals(pullParser.getName())) {// 返回文本的值/* 李明 */person.setName(pullParser.nextText());}/* <age> */if ("age".equals(pullParser.getName())) {/* 30 */person.setAge(new Short(pullParser.nextText()));}}break;// 结束元素事件/* </persons> */case XmlPullParser.END_TAG:// 当前解析器指向的节点为personif ("person".equals(pullParser.getName())) {persons.add(person);person = null;}break;}// 解析器向后解析event = pullParser.next();}return persons;}}
XmlActivity.java
package com.example.lession03_xml;import java.io.InputStream;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import com.example.lession03_xml.domain.Person;import com.example.lession03_xml.service.XMLContentHandlerService;import com.example.lession03_xml.service.XMLDomService;import com.example.lession03_xml.service.XMLPullService;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;import android.widget.Button;import android.widget.Toast;public class XmlActivity extends Activity {// 声明控件public Button btn_sax, btn_dom, btn_pull, btn_cpull;public XMLDomService xmlDomService;public XMLPullService xmlPullService;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 设置显示的视图setContentView(R.layout.activity_xml);// 实例化xmlDomService = new XMLDomService();xmlPullService = new XMLPullService();// 通过findViewById方法获取控件对象btn_sax = (Button) findViewById(R.id.btn_sax);btn_dom = (Button) findViewById(R.id.btn_dom);btn_pull = (Button) findViewById(R.id.btn_pull);btn_cpull = (Button) findViewById(R.id.button_cpull);// 给按钮注册事件btn_sax.setOnClickListener(new MyClickListener());btn_dom.setOnClickListener(new MyClickListener());btn_pull.setOnClickListener(new MyClickListener());btn_cpull.setOnClickListener(new MyClickListener());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.xml, menu);return true;}class MyClickListener implements View.OnClickListener {@Overridepublic void onClick(View v) {// 获取组件的idint id = v.getId();switch (id) {case R.id.btn_sax:Toast.makeText(XmlActivity.this, "采用sax解析xml文件案例",Toast.LENGTH_LONG).show();// sax解析的工厂对象SAXParserFactory factory = SAXParserFactory.newInstance();try {// 得到sax的解析器SAXParser saxParser = factory.newSAXParser();// 创建handler对象XMLContentHandlerService handlerService = new XMLContentHandlerService();// 获取到了 asserts目录中 csdn.xml文件InputStream is = getAssets().open("csdn.xml");// 直接解析 InputStream的流对象saxParser.parse(is, handlerService);// 通过 handlerService对象Toast.makeText(XmlActivity.this,"---" + handlerService.getPersons().size(),Toast.LENGTH_LONG).show();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}break;case R.id.btn_dom:InputStream is = null;try {// 获取读取文件的输入流对象is = getAssets().open("csdn.xml");// 采用List<Person> persons = xmlDomService.parseXML(is);//Toast.makeText(XmlActivity.this,"" + persons.get(0).getName(), Toast.LENGTH_LONG).show();} catch (Exception e) {e.printStackTrace();}break;case R.id.btn_pull:List<Person> persons = null;try {persons = xmlPullService.getPerson(getAssets().open("csdn.xml"));} catch (Exception e) {e.printStackTrace();}if (persons != null) {Toast.makeText(XmlActivity.this,"采用pull解析xml文件" + persons.get(0).getName() + "--"+ persons.get(1).getName(),Toast.LENGTH_LONG).show();}break;case R.id.button_cpull:break;default:break;}}}}
- android(14)_解析xml文件1_pull
- XML解析_PULL
- 赵雅智_pull解析xml
- android(12)_解析xml文件1_dom
- android(13)_解析xml文件1_sax
- 4_pull解析器
- android汇总_使用Pull解析器读取XML文件
- android(15)_使用Pull解析器生成XML文件
- Android 开发学习心得(一)。pull解析xml文件_天气预报
- ANDROID基础学习笔记_4.1_采用pull解析xml文件
- 04_android入门_pull解析
- Android解析XML文件
- android xml文件解析
- Android 解析XML文件
- android解析XML文件
- Android解析XML文件
- Android解析XML文件
- android xml文件解析
- Objective-c基础之NSDate与NSString、long型之间转换
- 谐振电路的工作原理是什么?以及应用,麻烦说的详细点
- android(13)_解析xml文件1_sax
- Android GridView 使用方法
- zTree 常见问题
- android(14)_解析xml文件1_pull
- 手机应用:史密斯圆图工具
- kettle jndi
- React中文教程 - Component Basics(组件基础)
- 题目1064:反序数 (数字反转)
- 充分利用栈空间提高程序性能
- Mac Os下安装mysql
- opencv2实现分水岭分割算法
- android activity无title theme