Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。


如下为要解析的XML文件

文件名称:persons.xml
<?xml version="1.0" encoding="UTF-8"?><persons>    <person id=“18">        <name>allen</name>        <age>36</age>    </person>    <person id=“28">        <name>james</name>        <age>25</age>    </person></persons>



例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,如下:

public class Person {private Integer id;private String name;private Short age;public Integer getId() {return id;}public void setId(Integer 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;}}


使用Pull解析器读取itcast.xml的代码如下:

import org.xmlpull.v1.XmlPullParser;import android.util.Xml;import cn.itcast.xml.domain.Person;public class PullXMLReader {public static List<Person> readXML(InputStream inStream) {    XmlPullParser parser = Xml.newPullParser();    try {    parser.setInput(inStream, "UTF-8");    int eventType = parser.getEventType();    Person currentPerson = null;    List<Person> persons = null;    while (eventType != XmlPullParser.END_DOCUMENT) {        switch (eventType) {        case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理            persons = new ArrayList<Person>();            break;        case XmlPullParser.START_TAG://开始元素事件            String name = parser.getName();            if (name.equalsIgnoreCase("person")) {                currentPerson = new Person();                currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));            } else if (currentPerson != null) {                if (name.equalsIgnoreCase("name")) {                    currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值                } else if (name.equalsIgnoreCase("age")) {                    currentPerson.setAge(new Short(parser.nextText()));                }            }            break;        case XmlPullParser.END_TAG://结束元素事件            if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {                persons.add(currentPerson);                currentPerson = null;            }            break;        }        eventType = parser.next();    }    inStream.close();    return persons;    } catch (Exception e) {        e.printStackTrace();    }    return null;}}

使用Pull解析器生成XML文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

使用Pull解析器生成一个与persons.xml


使用代码如下(生成XML文件):
File xmlFile = new File("persons.xml");
FileOutputStream outStream = new FileOutputStream(xmlFile);
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
BufferedWriter writer = new BufferedWriter(outStreamWriter);
writeXML(persons, writer);
writer.flush();
writer.close();
如果只想得到生成的xml字符串内容,可以使用StringWriter:
StringWriter writer = new StringWriter();
writeXML(persons, writer);
String content = writer.toString();


更多相关文章

  1. dom读取xml文档---android
  2. Android(安卓)windows系统上安装与使用NDK
  3. Java利用TCP协议发送文件(三)--客户端设计
  4. ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
  5. Android(安卓)Studio 使用Gradle引入第三方库文件的总结(Jar文件
  6. android中app的优化流程
  7. [Android]多module合成单一module技巧
  8. Android:将电脑上的文件传输到模拟器的sdcard上
  9. Android(安卓)SDK工具(谷歌提供的16个工具)简介

随机推荐

  1. 【Android UI】状态栏和toolbar颜色一致
  2. webrtc android版本的编译及release版本
  3. Android模拟器分辨率介绍
  4. android目标sdk版本
  5. Android 点击back键两次退出程序
  6. Android Studio第三十一期 - 记录Recycle
  7. 有需要免费视频的,Android ,IOS,H5,React Na
  8. Android动态获取存储权限
  9. android学习日志
  10. Android之——判断当前应用程序是否是用