Android-Xml,PullParser,解析

persons.xml文件内容: 

<?xml version=‘1.0‘ encoding=‘UTF-8‘ standalone=‘yes‘ ?><persons>

    <person id="0"><name>zhangsan0</name><age>10</age></person>

    <person id="1"><name>zhangsan1</name><age>11</age></person>

    <person id="2"><name>zhangsan2</name><age>12</age></person>

    <person id="3"><name>zhangsan3</name><age>13</age></person>

    <person id="4"><name>zhangsan4</name><age>14</age></person>

    <person id="5"><name>zhangsan5</name><age>15</age></person>

    <person id="6"><name>zhangsan6</name><age>16</age></person>

    <person id="7"><name>zhangsan7</name><age>17</age></person>

    <person id="8"><name>zhangsan8</name><age>18</age></person>

    <person id="9"><name>zhangsan9</name><age>19</age></person>

    <person id="10"><name>zhangsan10</name><age>20</age></person>

    <person id="11"><name>zhangsan11</name><age>21</age></person>

    <person id="12"><name>zhangsan12</name><age>22</age></person>

    <person id="13"><name>zhangsan13</name><age>23</age></person>

    <person id="14"><name>zhangsan14</name><age>24</age></person>

    <person id="15"><name>zhangsan15</name><age>25</age></person>

    <person id="16"><name>zhangsan16</name><age>26</age></person>

    <person id="17"><name>zhangsan17</name><age>27</age></person>

    <person id="18"><name>zhangsan18</name><age>28</age></person>

    <person id="19"><name>zhangsan19</name><age>29</age></person>

</persons>

点击动作,去解析xml数据,并Log.d打印出来: 



PullParser解析器是基于事件的,有开始文档,结束文档,开始标签,结束标签,当事件解析到那个节点的时候,是可以通过pullParser.getName();得到某个具体节点;

@Override
    public void onClick(View v) {

        try {
            // 得到Android 提供的Xml解析器 PullParser
            XmlPullParser pullParser = Xml.newPullParser();

            // 指定文件流对象
            InputStream is = openFileInput("persons.xml");

            // 设置需要解析的文件流对象
            pullParser.setInput(is, "utf-8");

            // 开始解析

            // 获取解析事件的类型
            int eventType = pullParser.getEventType();

            List<Person> persons = null;
            Person person = null;

            // 只要没有解析到文档的结尾,就继续往下不停的解析
            while(eventType != XmlPullParser.END_DOCUMENT) {

                switch (eventType) {
                    // 节点开始标记<xxx>
                    case XmlPullParser.START_TAG:
                        // 解析到根节点
                        if (pullParser.getName().equals("persons")) {
                            persons = new ArrayList<Person>();
                        }
                        // 解析到子节点
                        else if (pullParser.getName().equals("person")) {
                            person = new Person();
                            // 解析ID属性
                            // 因为我只有一个属性,所以是0
                            int id = Integer.parseInt(pullParser.getAttributeValue(0));
                            person.setId(id);
                        }
                        // 解析到子节点的name
                        else if (pullParser.getName().equals("name")) {
                            person.setName(pullParser.nextText());
                        }
                        // 解析到子节点的age
                        else if (pullParser.getName().equals("age")) {
                            person.setAge(Integer.valueOf(pullParser.nextText()));
                        }
                        break;
                    case XmlPullParser.END_TAG:   // 节点结束标记</xxx>
                        // 当解析到</person>就代表解析一个完一个子节点了
                        if (pullParser.getName().equals("person")) {
                            persons.add(person);
                            person = null;
                        }
                        break;
                    default:
                        break;
                }

                // 更新解析的哪里了
                eventType = pullParser.next();
            }

            // 把解析出来的Xml数据,进行日志打印
            for (Person p : persons) {
                Log.d(TAG, "解析出来的Xml数据:" + p.toString());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
}

Log.d 打印结果:

解析出来的Xml数据:Person{id=0, name=’zhangsan0’, age=10}
解析出来的Xml数据:Person{id=1, name=’zhangsan1’, age=11}
解析出来的Xml数据:Person{id=2, name=’zhangsan2’, age=12}
解析出来的Xml数据:Person{id=3, name=’zhangsan3’, age=13}
解析出来的Xml数据:Person{id=4, name=’zhangsan4’, age=14}
解析出来的Xml数据:Person{id=5, name=’zhangsan5’, age=15}
解析出来的Xml数据:Person{id=6, name=’zhangsan6’, age=16}
解析出来的Xml数据:Person{id=7, name=’zhangsan7’, age=17}
解析出来的Xml数据:Person{id=8, name=’zhangsan8’, age=18}
解析出来的Xml数据:Person{id=9, name=’zhangsan9’, age=19}
解析出来的Xml数据:Person{id=10, name=’zhangsan10’, age=20}
解析出来的Xml数据:Person{id=11, name=’zhangsan11’, age=21}
解析出来的Xml数据:Person{id=12, name=’zhangsan12’, age=22}
解析出来的Xml数据:Person{id=13, name=’zhangsan13’, age=23}
解析出来的Xml数据:Person{id=14, name=’zhangsan14’, age=24}
解析出来的Xml数据:Person{id=15, name=’zhangsan15’, age=25}
解析出来的Xml数据:Person{id=16, name=’zhangsan16’, age=26}
解析出来的Xml数据:Person{id=17, name=’zhangsan17’, age=27}
解析出来的Xml数据:Person{id=18, name=’zhangsan18’, age=28}
解析出来的Xml数据:Person{id=19, name=’zhangsan19’, age=29}

原文地址:https://www.cnblogs.com/android-deli/p/10093108.html

时间: 2024-10-12 14:04:34

Android-Xml,PullParser,解析的相关文章

Android XML pull解析

List<weatherinfos> listinfo = null; weatherinfos singleinfo = null; XmlPullParser parse = Xml.newPullParser(); try { parse.setInput(in, "utf-8"); int eventtype = parse.getEventType(); while (eventtype != XmlPullParser.END_DOCUMENT) { switc

Android xml文件解析(getSharedPreferences)

package com.itheima.share; import android.os.Bundle;import android.app.Activity;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.text.TextUtils;import android.view.Menu;import android.view.View;i

Android开发之解析XML并实现三级联动效果

请尊重他人的劳动成果,转载请注明出处:Android开发之解析XML并实现三级联动效果 本实例主要应用XmlPullParser解析XML文档中的省市区,然后将数据绑定到Spinner上实现三级联动的效果.关于XmlPullParser的详解大家可以参考<Android开发之使用PULL解析和生成XML>一文. 运行效果图: 程序代码: 核心代码: <pre name="code" class="java">package com.jph.s

XML及PullParser解析

一.什么是XML 1.概念:extensive markup language(可扩展的标记语言) XML是一种通用的数据存储和交换格式,与平台无关,与编程语言无关,与操作系统无关.给数据集成和交互提供了极大的便利.将数据格式化成XML文件后,真正实现了据跨平台的交互和共享.在不同语言中,xml的解析方式都一样. 2.XML的解析:xml parse 对xml文件进行阅读和分析,提取出希望的数据和数据属性.在android开发中,将xml解析后,把数据放进List<Map<String, Ob

android xml产生和解析

public static void writeToXml(Map<String, Object> map,Writer writer) throws Exception, IllegalStateException, IOException{          XmlSerializer serializer = Xml.newSerializer();          serializer.setOutput(writer);       serializer.startDocument

android XML解析器全解案例

1.使用pull解析 1 package com.example.myxml; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 7 import org.xmlpull.v1.XmlPullParser; 8 import org.xmlpull.v1.XmlPullParserFactory; 9 10 import android.util.Log; 11 imp

Android中用PULL解析XML

解析XML的方式有DOM,SAX,PULL,那为什么要在Android中使用PULL解析呢?首先来说一下PULL解析的优点,然后再说一下其他两种解析方式的缺点,答案就清晰可见啦. DOM不适合文档较大,内存较小的场景.DOM是基于树形结构的的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树.检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息.由于DOM在内存中以树形结构存放,因此检索和更新效率会更高.但是对于特别大的文档,解析和加载整个文档将

(Android review)XML的解析与序列化

这篇博客主要用来介绍对XML文件的操作:解析与生成. Android手机内部的解析就是pull解析官网:http://xmlpull.org/所谓的解析,我们可以理解为:利用XML文件的内容来生成一个对象导出生成的xml文件后不要对其格式化,否则会出异常 1.MainActivity package com.example.xmlparsertest1; import android.os.Bundle; import android.app.Activity; import android.v

【Android进阶】解析XML文件之使用DOM解析器

在前面的文章中,介绍了使用SAX解析器对XML文件进行解析,SAX解析器的优点就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析.DOM解析器的优点可能是理解起来比较的直观,当然,每个人对不同的解析方法可能有不同的喜好.但是DOM解析器有个比较大的缺点,就是占用内存比较多,在Android中的XML解析中,还是更推荐其他的解析方式. 下面介绍使用DOM解析器对XML进行解析. 下面是我们需要解析的xml文件 <?xml version="1.0" encodin

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文