android xml解析 XmlPullParser & XmlSerializer

来源:互联网 发布:协同过滤算法的研究 编辑:程序博客网 时间:2024/05/18 02:31

因为这两个类我也不是太常用,当用起时就忘记怎么用的了,所有写下这篇博客,以便用的时候可以直接粘过去用了。

XMlPullParser

1、 准备数据

数据是放在assets文件夹下的user.xml

<?xml version="1.0" encoding="utf-8"?><users>    <user id="1">        <name>嬴政</name>        <password>qing</password>    </user>    <user id="2">        <name>刘邦</name>        <password>han</password>    </user>    <user id="3">        <name>司马昭</name>        <password>jin</password>    </user>    <user id="4">        <name>杨坚</name>        <password>sui</password>    </user></users>

2、 解析

public void readXml(){    InputStream is = null;    try {        //获取文件输入流        is = getResources().getAssets().open("user.xml");        //得到解析器对象        XmlPullParser pullParser = Xml.newPullParser();        //把流设置给解析器        pullParser.setInput(is, "utf-8");        //得到第一个元素的事件类型        int eventType = pullParser.getEventType();        //如果不是文件结束事件,继续循环        while(eventType!=XmlPullParser.END_DOCUMENT){            switch (eventType) {                //开始标签                case XmlPullParser.START_TAG:                    String name = pullParser.getName();                    Log.e(TAG, "readXml1: " + name);                    if (name.equals("user")) {                        Log.e(TAG, "attribute2: "+ pullParser.getAttributeName(0) + ":" +                                pullParser.getAttributeValue(0));                    }                    break;                //文本标签                case XmlPullParser.TEXT:                    String text = pullParser.getText();                    if(!TextUtils.isEmpty(text.trim()))                        Log.e(TAG, "readXml4: " + text);                    break;                //结束标签                case XmlPullParser.END_TAG:                    Log.e(TAG, "readXml5: /" + pullParser.getName());                    break;            }            //得到下一个标签的事件类型            eventType = pullParser.next();        }    } catch (Exception e) {        e.printStackTrace();    }finally{        try {            is.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

3、输出结果
logcat片段

XMlSerializer

1、 准备数据

private ArrayList<User> userList = new ArrayList<User>();    public void prepareData(){        for(int i=0; i<50; i++){            User user =  new User(i, "李世民"+i, "abc"+i);            userList.add(user);        }    }

2、进行写入

public void writeXml(){    FileOutputStream fis = null;    try {        //得到序列化xml的对象        XmlSerializer serializer = Xml.newSerializer();        //得到要写入到的文件输出流        fis = this.openFileOutput("user.xml", Context.MODE_APPEND);        //设置编码和流        serializer.setOutput(fis, "UTF-8");        //xml文档头部 也就是 <?xml version="1.0" encoding="utf-8"?>        serializer.startDocument("UTF-8", true);        serializer.startTag(null, "users");        User user;        //下面的null为命名空间,xml没有命名空间直接写null        for(int i=0; i<userList.size(); i++){            user = userList.get(i);            serializer.startTag(null, "user");  //写入开始标签            serializer.attribute(null, "id", user.getId()+""); //写入属性            serializer.startTag(null, "name");            serializer.text(user.getName()); //写入属性            serializer.endTag(null, "name");            serializer.startTag(null, "password");            serializer.text(user.getPassword());            serializer.endTag(null, "password");            serializer.endTag(null, "user"); //写入结束标签        }        serializer.endTag(null, "users");        serializer.endDocument();        Log.e(TAG, "writeXml: 写入成功" );    } catch (Exception e) {        e.printStackTrace();    }finally {        try {            fis.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

3、查看结果
在手机文件管理器中找到data/data/packagename/files/user.xml,文件,导出到桌面。

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><users><user id="0"><name>李世民0</name><password>abc0</password></user><user id="1"><name>李世民1</name><password>abc1</password></user><user id="2"><name>李世民2</name><password>abc2</password></user><user id="3"><name>李世民3</name><password>abc3</password></user><user id="4"><name>李世民4</name><password>abc4</password></user><user id="5"><name>李世民5</name><password>abc5</password></user><user id="6"><name>李世民6</name><password>abc6</password></user><user id="7"><name>李世民7</name><password>abc7</password></user><user id="8"><name>李世民8</name><password>abc8</password></user><user id="9"><name>李世民9</name><password>abc9</password></user><user id="10"><name>李世民10</name><password>abc10</password></user><user id="11"><name>李世民11</name><password>abc11</password></user><user id="12"><name>李世民12</name><password>abc12</password></user><user id="13"><name>李世民13</name><password>abc13</password></user><user id="14"><name>李世民14</name><password>abc14</password></user><user id="15"><name>李世民15</name><password>abc15</password></user><user id="16"><name>李世民16</name><password>abc16</password></user><user id="17"><name>李世民17</name><password>abc17</password></user><user id="18"><name>李世民18</name><password>abc18</password></user><user id="19"><name>李世民19</name><password>abc19</password></user><user id="20"><name>李世民20</name><password>abc20</password></user><user id="21"><name>李世民21</name><password>abc21</password></user><user id="22"><name>李世民22</name><password>abc22</password></user><user id="23"><name>李世民23</name><password>abc23</password></user><user id="24"><name>李世民24</name><password>abc24</password></user><user id="25"><name>李世民25</name><password>abc25</password></user><user id="26"><name>李世民26</name><password>abc26</password></user><user id="27"><name>李世民27</name><password>abc27</password></user><user id="28"><name>李世民28</name><password>abc28</password></user><user id="29"><name>李世民29</name><password>abc29</password></user><user id="30"><name>李世民30</name><password>abc30</password></user><user id="31"><name>李世民31</name><password>abc31</password></user><user id="32"><name>李世民32</name><password>abc32</password></user><user id="33"><name>李世民33</name><password>abc33</password></user><user id="34"><name>李世民34</name><password>abc34</password></user><user id="35"><name>李世民35</name><password>abc35</password></user><user id="36"><name>李世民36</name><password>abc36</password></user><user id="37"><name>李世民37</name><password>abc37</password></user><user id="38"><name>李世民38</name><password>abc38</password></user><user id="39"><name>李世民39</name><password>abc39</password></user><user id="40"><name>李世民40</name><password>abc40</password></user><user id="41"><name>李世民41</name><password>abc41</password></user><user id="42"><name>李世民42</name><password>abc42</password></user><user id="43"><name>李世民43</name><password>abc43</password></user><user id="44"><name>李世民44</name><password>abc44</password></user><user id="45"><name>李世民45</name><password>abc45</password></user><user id="46"><name>李世民46</name><password>abc46</password></user><user id="47"><name>李世民47</name><password>abc47</password></user><user id="48"><name>李世民48</name><password>abc48</password></user><user id="49"><name>李世民49</name><password>abc49</password></user></users>

这是直接导出的样子,利用IDE格式化之后会方便查看。

建议:使用XmlSerializer写入时,当写一个开始标签后就写一个结束标签,防止有标签漏掉如。如先写startTag(null, “user”)和endTag(null, “user”);然后再写中间的内容。

原创粉丝点击