xml解析之Pull

为了学习Pull解析xml,可以简单的做个小Demo

  • 第一步:以字符串的形式创建出xml。
    String str = "<?xml version="1.0" encoding="UTF-8"?>\n" +
    "<persons>\n" +
    " <person id="1">\n" +
    " <name>小罗</name>\n" +
    " <age>21</age>\n" +
    " </person>\n" +
    " <person id="2">\n" +
    " <name>android</name>\n" +
    " <age>15</age>\n" +
    " </person>\n" +
    "</persons>";

  • 第二步:根据xml文件封装实体类:
    public class Person implements Serializable {
    int id;
    String name;
    int age;
    public void setAge(int age) {
    this.age = age;
    }
    public void setId(int id) {
    this.id = id;
    }
    public void setName(String name) {
    this.name = name;
    }
    @Override public String toString() {
    return "Person{" +
    "age=" + age +
    ", id=" + id +
    ", name='" + name + ''' + '}';
    }
    }

  • 第三步:创建解析方法:
    public List<Person> PullParseXml(InputStream inputStream) throws XmlPullParserException, IOException {
    List<Person> persons = new ArrayList<>();
    Person person = null;
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser xmlPullParser = factory.newPullParser();
    xmlPullParser.setInput(inputStream, "utf-8");
    int eventType = xmlPullParser.getEventType();
    while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {
    // 解析到文档开始的时候
    case XmlPullParser.START_DOCUMENT:
    persons = new ArrayList<Person>();
    break;
    // 解析到xml标签的时候
    case XmlPullParser.START_TAG:
    if ("person".equals(xmlPullParser.getName())) {
    person = new Person();
    // 得到person元素的第一个属性,也就是ID
    person.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));
    } else if ("name".equals(xmlPullParser.getName())) {
    // 如果是name元素,则通过nextText()方法得到元素的值
    person.setName(xmlPullParser.nextText());
    } else if ("age".equals(xmlPullParser.getName())) {
    person.setAge(Integer.parseInt(xmlPullParser.nextText()));
    }
    break;
    // 解析到xml标签结束的时候
    case XmlPullParser.END_TAG:
    if ("person".equals(xmlPullParser.getName())) {
    persons.add(person);
    person = null;
    }
    break;
    }
    // 通过next()方法触发下一个事件
    eventType = xmlPullParser.next();
    }
    return persons;
    }

  • 第四步:调用解析方法:
    byte[] bytes = str.getBytes();
    ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
    try {
    persons = PullParseXml(inputStream);
    Log.d("TAG", "size = " + persons.size());
    Log.d("TAG", persons.get(0).toString());
    Log.d("TAG", persons.get(1).toString());
    } catch (Exception e) {
    e.printStackTrace();
    }

  • 第五步:运行程序,你会得到如下Log:

Log.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 XML解析No29 【 XML:可拓展标记语言,语言和HTML类似,也是一种标记语言。 特点:标记是自定义...
    征程_Journey阅读 5,635评论 0 9
  • 在assets目录下创建一个文件名为students.xml的XML文件. 创建一个与XML中节点相对应的bean...
    A_Coder阅读 1,813评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,963评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,558评论 19 139
  • 今年,2016,我们认识的第七个年头。 据说七是一个神奇的数字,在人们心目中有些神秘。夫妻有七年之痒,古时有“七政...
    欧欧的日记阅读 3,273评论 3 1