您的位置:首页 > 移动开发 > Android开发

Android解析XML详解

2016-01-27 14:21 495 查看



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.代码示例下载:

运行效果图:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: