Android解析XML详解

来源:互联网 发布:情定三生知夏死了没 编辑:程序博客网 时间:2024/06/05 23:56

1.XML数据要点介绍

首先我们来看看XML数据的一些要求以及概念:


2.三种解析XML方法的比较


3.SAX解析XML数据

核心代码

SAX解析类:SaxHelper.java

<code class="language-Java hljs java has-numbering" style="display: block; padding: 0px; box-sizing: border-box; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);"><span class="hljs-javadoc" style="box-sizing: border-box;">/** * Created by Jay on 2015/9/8 0008. */</span><span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box;">SaxHelper</span> <span class="hljs-keyword" style="box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box;">DefaultHandler</span> {</span>    <span class="hljs-keyword" style="box-sizing: border-box;">private</span> Person person;    <span class="hljs-keyword" style="box-sizing: border-box;">private</span> ArrayList<Person> persons;    <span class="hljs-comment" style="box-sizing: border-box;">//当前解析的元素标签</span>    <span class="hljs-keyword" style="box-sizing: border-box;">private</span> String tagName = <span class="hljs-keyword" style="box-sizing: border-box;">null</span>;    <span class="hljs-javadoc" style="box-sizing: border-box;">/**     * 当读取到文档开始标志是触发,通常在这里完成一些初始化操作     */</span>    <span class="hljs-annotation" style="box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">startDocument</span>() <span class="hljs-keyword" style="box-sizing: border-box;">throws</span> SAXException {        <span class="hljs-keyword" style="box-sizing: border-box;">this</span>.persons = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> ArrayList<Person>();        Log.i(<span class="hljs-string" style="box-sizing: border-box;">"SAX"</span>, <span class="hljs-string" style="box-sizing: border-box;">"读取到文档头,开始解析xml"</span>);    }    <span class="hljs-javadoc" style="box-sizing: border-box;">/**     * 读到一个开始标签时调用,第二个参数为标签名,最后一个参数为属性数组     */</span>    <span class="hljs-annotation" style="box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">startElement</span>(String uri, String localName, String qName,                             Attributes attributes) <span class="hljs-keyword" style="box-sizing: border-box;">throws</span> SAXException {        <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (localName.equals(<span class="hljs-string" style="box-sizing: border-box;">"person"</span>)) {            person = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> Person();            person.setId(Integer.parseInt(attributes.getValue(<span class="hljs-string" style="box-sizing: border-box;">"id"</span>)));            Log.i(<span class="hljs-string" style="box-sizing: border-box;">"SAX"</span>, <span class="hljs-string" style="box-sizing: border-box;">"开始处理person元素~"</span>);        }        <span class="hljs-keyword" style="box-sizing: border-box;">this</span>.tagName = localName;    }    <span class="hljs-javadoc" style="box-sizing: border-box;">/**     * 读到到内容,第一个参数为字符串内容,后面依次为起始位置与长度     */</span>    <span class="hljs-annotation" style="box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">characters</span>(<span class="hljs-keyword" style="box-sizing: border-box;">char</span>[] ch, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> start, <span class="hljs-keyword" style="box-sizing: border-box;">int</span> length)            <span class="hljs-keyword" style="box-sizing: border-box;">throws</span> SAXException {        <span class="hljs-comment" style="box-sizing: border-box;">//判断当前标签是否有效</span>        <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="box-sizing: border-box;">this</span>.tagName != <span class="hljs-keyword" style="box-sizing: border-box;">null</span>) {            String data = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> String(ch, start, length);            <span class="hljs-comment" style="box-sizing: border-box;">//读取标签中的内容</span>            <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="box-sizing: border-box;">this</span>.tagName.equals(<span class="hljs-string" style="box-sizing: border-box;">"name"</span>)) {                <span class="hljs-keyword" style="box-sizing: border-box;">this</span>.person.setName(data);                Log.i(<span class="hljs-string" style="box-sizing: border-box;">"SAX"</span>, <span class="hljs-string" style="box-sizing: border-box;">"处理name元素内容"</span>);            } <span class="hljs-keyword" style="box-sizing: border-box;">else</span> <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="box-sizing: border-box;">this</span>.tagName.equals(<span class="hljs-string" style="box-sizing: border-box;">"age"</span>)) {                <span class="hljs-keyword" style="box-sizing: border-box;">this</span>.person.setAge(Integer.parseInt(data));                Log.i(<span class="hljs-string" style="box-sizing: border-box;">"SAX"</span>, <span class="hljs-string" style="box-sizing: border-box;">"处理age元素内容"</span>);            }        }    }    <span class="hljs-javadoc" style="box-sizing: border-box;">/**     * 处理元素结束时触发,这里将对象添加到结合中     */</span>    <span class="hljs-annotation" style="box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">endElement</span>(String uri, String localName, String qName)            <span class="hljs-keyword" style="box-sizing: border-box;">throws</span> SAXException {        <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (localName.equals(<span class="hljs-string" style="box-sizing: border-box;">"person"</span>)) {            <span class="hljs-keyword" style="box-sizing: border-box;">this</span>.persons.add(person);            person = <span class="hljs-keyword" style="box-sizing: border-box;">null</span>;            Log.i(<span class="hljs-string" style="box-sizing: border-box;">"SAX"</span>, <span class="hljs-string" style="box-sizing: border-box;">"处理person元素结束~"</span>);        }        <span class="hljs-keyword" style="box-sizing: border-box;">this</span>.tagName = <span class="hljs-keyword" style="box-sizing: border-box;">null</span>;    }    <span class="hljs-javadoc" style="box-sizing: border-box;">/**     * 读取到文档结尾时触发,     */</span>    <span class="hljs-annotation" style="box-sizing: border-box;">@Override</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">endDocument</span>() <span class="hljs-keyword" style="box-sizing: border-box;">throws</span> SAXException {        <span class="hljs-keyword" style="box-sizing: border-box;">super</span>.endDocument();        Log.i(<span class="hljs-string" style="box-sizing: border-box;">"SAX"</span>, <span class="hljs-string" style="box-sizing: border-box;">"读取到文档尾,xml解析结束"</span>);    }    <span class="hljs-comment" style="box-sizing: border-box;">//获取persons集合</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> ArrayList<Person> <span class="hljs-title" style="box-sizing: border-box;">getPersons</span>() {        <span class="hljs-keyword" style="box-sizing: border-box;">return</span> persons;    }}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">31</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">32</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">33</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">34</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">35</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">36</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">37</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">38</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">39</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">40</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">41</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">42</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">43</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">44</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">45</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">46</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">47</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">48</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">49</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">50</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">51</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">52</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">53</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">54</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">55</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">56</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">57</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">58</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">59</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">60</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">61</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">62</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">63</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">64</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">65</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">66</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">67</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">68</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">69</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">70</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">71</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">72</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">73</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">74</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">75</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">76</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">77</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">78</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">79</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">80</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">81</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">82</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">83</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">84</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">85</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">86</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">87</span></li></ul>

然后我们在MainActivity.java中写上写上这样一个方法,然后要解析XML的时候调用下 
就好了~

<code class="language-Java hljs cs has-numbering" style="display: block; padding: 0px; box-sizing: border-box; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">    <span class="hljs-keyword" style="box-sizing: border-box;">private</span> ArrayList<Person> <span class="hljs-title" style="box-sizing: border-box;">readxmlForSAX</span>() throws Exception {        <span class="hljs-comment" style="box-sizing: border-box;">//获取文件资源建立输入流对象</span>        InputStream <span class="hljs-keyword" style="box-sizing: border-box;">is</span> = getAssets().open(<span class="hljs-string" style="box-sizing: border-box;">"person1.xml"</span>);        <span class="hljs-comment" style="box-sizing: border-box;">//①创建XML解析处理器</span>        SaxHelper ss = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> SaxHelper();        <span class="hljs-comment" style="box-sizing: border-box;">//②得到SAX解析工厂</span>        SAXParserFactory factory = SAXParserFactory.newInstance();        <span class="hljs-comment" style="box-sizing: border-box;">//③创建SAX解析器</span>        SAXParser parser = factory.newSAXParser();        <span class="hljs-comment" style="box-sizing: border-box;">//④将xml解析处理器分配给解析器,对文档进行解析,将事件发送给处理器</span>        parser.parse(<span class="hljs-keyword" style="box-sizing: border-box;">is</span>, ss);        <span class="hljs-keyword" style="box-sizing: border-box;">is</span>.close();        <span class="hljs-keyword" style="box-sizing: border-box;">return</span> ss.getPersons();    }</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">14</span></li></ul>

一些其他的话

嗯,对了,忘记给大家说下我们是定义下面这样一个person1.xml文件,然后放到assets目录下的! 
文件内容如下:person1.xml

<code class="language-XML hljs xml has-numbering" style="display: block; padding: 0px; box-sizing: border-box; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);"><span class="hljs-pi" style="box-sizing: border-box;"><?xml version="1.0" encoding="UTF-8"?></span><span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">persons</span>></span>    <span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">person</span> <span class="hljs-attribute" style="box-sizing: border-box;">id</span> = "<span class="hljs-attribute" style="box-sizing: border-box;">11</span>"></span>        <span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">name</span>></span>SAX解析<span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">name</span>></span>        <span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">age</span>></span>18<span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">age</span>></span>    <span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">person</span>></span>    <span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">person</span> <span class="hljs-attribute" style="box-sizing: border-box;">id</span> = "<span class="hljs-attribute" style="box-sizing: border-box;">13</span>"></span>        <span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">name</span>></span>XML1<span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">name</span>></span>        <span class="hljs-tag" style="box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box;">age</span>></span>43<span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">age</span>></span>    <span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">person</span>></span><span class="hljs-tag" style="box-sizing: border-box;"></<span class="hljs-title" style="box-sizing: border-box;">persons</span>></span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">11</span></li></ul>

我们是把三种解析方式都糅合到一个demo中,所以最后才贴全部的效果图,这里的话,贴下打印的Log, 
相信大家会对SAX解析XML流程更加明了:

另外,外面的空白文本也是文本节点哦!解析的时候也会走这些节点!


4.DOM解析XML数据

核心代码

DomHelper.java

<code class="language-Java hljs java has-numbering" style="display: block; padding: 0px; box-sizing: border-box; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);"><span class="hljs-javadoc" style="box-sizing: border-box;">/** * Created by Jay on 2015/9/8 0008. */</span><span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box;">DomHelper</span> {</span>    <span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">static</span> ArrayList<Person> <span class="hljs-title" style="box-sizing: border-box;">queryXML</span>(Context context)    {        ArrayList<Person> Persons = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> ArrayList<Person>();        <span class="hljs-keyword" style="box-sizing: border-box;">try</span> {            <span class="hljs-comment" style="box-sizing: border-box;">//①获得DOM解析器的工厂示例:</span>            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();            <span class="hljs-comment" style="box-sizing: border-box;">//②从Dom工厂中获得dom解析器</span>            DocumentBuilder dbBuilder = dbFactory.newDocumentBuilder();            <span class="hljs-comment" style="box-sizing: border-box;">//③把要解析的xml文件读入Dom解析器</span>            Document doc = dbBuilder.parse(context.getAssets().open(<span class="hljs-string" style="box-sizing: border-box;">"person2.xml"</span>));            System.out.println(<span class="hljs-string" style="box-sizing: border-box;">"处理该文档的DomImplemention对象="</span> + doc.getImplementation());            <span class="hljs-comment" style="box-sizing: border-box;">//④得到文档中名称为person的元素的结点列表</span>            NodeList nList = doc.getElementsByTagName(<span class="hljs-string" style="box-sizing: border-box;">"person"</span>);            <span class="hljs-comment" style="box-sizing: border-box;">//⑤遍历该集合,显示集合中的元素以及子元素的名字</span>            <span class="hljs-keyword" style="box-sizing: border-box;">for</span>(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> i = <span class="hljs-number" style="box-sizing: border-box;">0</span>;i < nList.getLength();i++)            {                <span class="hljs-comment" style="box-sizing: border-box;">//先从Person元素开始解析</span>                Element personElement = (Element) nList.item(i);                Person p = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> Person();                p.setId(Integer.valueOf(personElement.getAttribute(<span class="hljs-string" style="box-sizing: border-box;">"id"</span>)));                <span class="hljs-comment" style="box-sizing: border-box;">//获取person下的name和age的Note集合</span>                NodeList childNoList = personElement.getChildNodes();                <span class="hljs-keyword" style="box-sizing: border-box;">for</span>(<span class="hljs-keyword" style="box-sizing: border-box;">int</span> j = <span class="hljs-number" style="box-sizing: border-box;">0</span>;j < childNoList.getLength();j++)                {                    Node childNode = childNoList.item(j);                    <span class="hljs-comment" style="box-sizing: border-box;">//判断子note类型是否为元素Note</span>                    <span class="hljs-keyword" style="box-sizing: border-box;">if</span>(childNode.getNodeType() == Node.ELEMENT_NODE)                    {                        Element childElement = (Element) childNode;                        <span class="hljs-keyword" style="box-sizing: border-box;">if</span>(<span class="hljs-string" style="box-sizing: border-box;">"name"</span>.equals(childElement.getNodeName()))                            p.setName(childElement.getFirstChild().getNodeValue());                        <span class="hljs-keyword" style="box-sizing: border-box;">else</span> <span class="hljs-keyword" style="box-sizing: border-box;">if</span>(<span class="hljs-string" style="box-sizing: border-box;">"age"</span>.equals(childElement.getNodeName()))                            p.setAge(Integer.valueOf(childElement.getFirstChild().getNodeValue()));                    }                }                Persons.add(p);            }        } <span class="hljs-keyword" style="box-sizing: border-box;">catch</span> (Exception e) {e.printStackTrace();}        <span class="hljs-keyword" style="box-sizing: border-box;">return</span> Persons;    }}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">31</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">32</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">33</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">34</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">35</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">36</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">37</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">38</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">39</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">40</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">41</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">42</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">43</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">44</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">45</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">46</span></li></ul>

代码分析

从代码我们就可以看出DOM解析XML的流程,先整个文件读入Dom解析器,然后形成一棵树, 
然后我们可以遍历节点列表获取我们需要的数据!


5.PULL解析XML数据

使用PULL解析XML数据的流程

核心代码

<code class="language-Java hljs java has-numbering" style="display: block; padding: 0px; box-sizing: border-box; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);"><span class="hljs-keyword" style="box-sizing: border-box;">public</span> <span class="hljs-keyword" style="box-sizing: border-box;">static</span> ArrayList<Person> <span class="hljs-title" style="box-sizing: border-box;">getPersons</span>(InputStream xml)<span class="hljs-keyword" style="box-sizing: border-box;">throws</span> Exception    {        <span class="hljs-comment" style="box-sizing: border-box;">//XmlPullParserFactory pullPaser = XmlPullParserFactory.newInstance();</span>        ArrayList<Person> persons = <span class="hljs-keyword" style="box-sizing: border-box;">null</span>;        Person person = <span class="hljs-keyword" style="box-sizing: border-box;">null</span>;        <span class="hljs-comment" style="box-sizing: border-box;">// 创建一个xml解析的工厂  </span>        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();          <span class="hljs-comment" style="box-sizing: border-box;">// 获得xml解析类的引用  </span>        XmlPullParser parser = factory.newPullParser();          parser.setInput(xml, <span class="hljs-string" style="box-sizing: border-box;">"UTF-8"</span>);          <span class="hljs-comment" style="box-sizing: border-box;">// 获得事件的类型  </span>        <span class="hljs-keyword" style="box-sizing: border-box;">int</span> eventType = parser.getEventType();          <span class="hljs-keyword" style="box-sizing: border-box;">while</span> (eventType != XmlPullParser.END_DOCUMENT) {              <span class="hljs-keyword" style="box-sizing: border-box;">switch</span> (eventType) {              <span class="hljs-keyword" style="box-sizing: border-box;">case</span> XmlPullParser.START_DOCUMENT:                  persons = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> ArrayList<Person>();                  <span class="hljs-keyword" style="box-sizing: border-box;">break</span>;              <span class="hljs-keyword" style="box-sizing: border-box;">case</span> XmlPullParser.START_TAG:                  <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-string" style="box-sizing: border-box;">"person"</span>.equals(parser.getName())) {                      person = <span class="hljs-keyword" style="box-sizing: border-box;">new</span> Person();                      <span class="hljs-comment" style="box-sizing: border-box;">// 取出属性值  </span>                    <span class="hljs-keyword" style="box-sizing: border-box;">int</span> id = Integer.parseInt(parser.getAttributeValue(<span class="hljs-number" style="box-sizing: border-box;">0</span>));                      person.setId(id);                  } <span class="hljs-keyword" style="box-sizing: border-box;">else</span> <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-string" style="box-sizing: border-box;">"name"</span>.equals(parser.getName())) {                      String name = parser.nextText();<span class="hljs-comment" style="box-sizing: border-box;">// 获取该节点的内容  </span>                    person.setName(name);                  } <span class="hljs-keyword" style="box-sizing: border-box;">else</span> <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-string" style="box-sizing: border-box;">"age"</span>.equals(parser.getName())) {                      <span class="hljs-keyword" style="box-sizing: border-box;">int</span> age = Integer.parseInt(parser.nextText());                      person.setAge(age);                  }                  <span class="hljs-keyword" style="box-sizing: border-box;">break</span>;              <span class="hljs-keyword" style="box-sizing: border-box;">case</span> XmlPullParser.END_TAG:                  <span class="hljs-keyword" style="box-sizing: border-box;">if</span> (<span class="hljs-string" style="box-sizing: border-box;">"person"</span>.equals(parser.getName())) {                      persons.add(person);                      person = <span class="hljs-keyword" style="box-sizing: border-box;">null</span>;                  }                  <span class="hljs-keyword" style="box-sizing: border-box;">break</span>;              }              eventType = parser.next();          }          <span class="hljs-keyword" style="box-sizing: border-box;">return</span> persons;      }  </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">31</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">32</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">33</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">34</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">35</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">36</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">37</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">38</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">39</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">40</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">41</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">42</span></li></ul>

使用Pull生成xml数据的流程:

核心代码

<code class="language-Java hljs avrasm has-numbering" style="display: block; padding: 0px; box-sizing: border-box; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">public static void save(List<Person> persons, OutputStream <span class="hljs-keyword" style="box-sizing: border-box;">out</span>) throws Exception {        XmlSerializer serializer = Xml<span class="hljs-preprocessor" style="box-sizing: border-box;">.newSerializer</span>()<span class="hljs-comment" style="box-sizing: border-box;">;</span>        serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.setOutput</span>(<span class="hljs-keyword" style="box-sizing: border-box;">out</span>, <span class="hljs-string" style="box-sizing: border-box;">"UTF-8"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>        serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.startDocument</span>(<span class="hljs-string" style="box-sizing: border-box;">"UTF-8"</span>, true)<span class="hljs-comment" style="box-sizing: border-box;">;</span>        serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.startTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"persons"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>        for (Person p : persons) {            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.startTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"person"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.attribute</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"id"</span>, p<span class="hljs-preprocessor" style="box-sizing: border-box;">.getId</span>() + <span class="hljs-string" style="box-sizing: border-box;">""</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.startTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"name"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.text</span>(p<span class="hljs-preprocessor" style="box-sizing: border-box;">.getName</span>())<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.endTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"name"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.startTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"age"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.text</span>(p<span class="hljs-preprocessor" style="box-sizing: border-box;">.getAge</span>() + <span class="hljs-string" style="box-sizing: border-box;">""</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.endTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"age"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>            serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.endTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"person"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>        }        serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.endTag</span>(null, <span class="hljs-string" style="box-sizing: border-box;">"persons"</span>)<span class="hljs-comment" style="box-sizing: border-box;">;</span>        serializer<span class="hljs-preprocessor" style="box-sizing: border-box;">.endDocument</span>()<span class="hljs-comment" style="box-sizing: border-box;">;</span>        <span class="hljs-keyword" style="box-sizing: border-box;">out</span><span class="hljs-preprocessor" style="box-sizing: border-box;">.flush</span>()<span class="hljs-comment" style="box-sizing: border-box;">;</span>        <span class="hljs-keyword" style="box-sizing: border-box;">out</span><span class="hljs-preprocessor" style="box-sizing: border-box;">.close</span>()<span class="hljs-comment" style="box-sizing: border-box;">;</span>    }</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-family:KaiTi_GB2312;font-size:18px;color:#330033;background-color: rgb(255, 255, 255);">22</span></li></ul>

6.代码示例下载:

运行效果图

0 0
原创粉丝点击