Android解析XML详解

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值