在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。
下面是本例子要解析的XML文件:itcast.xml
例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码:
1. SAX解析XML文件
SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。
2. DOM解析XML文件
DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOM API遍历XML树、检索所需的数据。使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单。但是,因为DOM需要将 XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX 来解析XML文件,当然,如果XML文件的内容比较小采用DOM是可行的。
3.Pull解析器解析XML文件
Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。
4.SAX和PULL使用
区别为:SAX解析器的工作方式是自动将事件推入事件处理器进行处理,因此你不能控制事件的处理主动结束;而Pull解析器的工作方式为允许你的应用程序代码主动从解析器中获取事件,正因为是主动获取事件,因此可以在满足了需要的条件后不再获取事件,结束解析。
你随便找个sax和pull的例子比较一下就可以发现,pull是一个while循环,随时可以跳出,而sax不是,sax是只要解析了,就必须解析完成。
</article>
</div>
<div class="col-md-3">
<div class="bdsharebuttonbox bdshare-button-style0-16" data-bd-bind="1488677789616">
<a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间"></a>
<a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"></a>
<a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博"></a>
<a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网"></a>
<a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"></a>
</div>
<div class=" side-box" style="margin-top: 20px;">
<div class="title"><h3>同类热门经验</h3></div>
<ol class="hot">
<li>
<a title="上百个Android开源项目分享" href="/lib/view/open1328063267889.html"><span class="title">上百个Android开源项目分享</span></a>
</li>
<li>
<a title="android" json解析及简单例子="" href="/lib/view/open1326376799874.html"><span class="title">android json解析及简单例子</span></a>
</li>
<li>
<a title="Android" 软件自动更新功能的实现="" href="/lib/view/open1322529319718.html"><span class="title">Android 软件自动更新功能的实现</span></a>
</li>
<li>
<a title="自定义" android="" 对话框="" (alertdialog)="" 的样式="" href="/lib/view/open1325635738437.html"><span class="title">自定义 Android 对话框 (AlertDialog) 的样式</span></a>
</li>
<li>
<a title="adb" shell="" 命令详解="" href="/lib/view/open1327557366686.html"><span class="title">adb shell 命令详解</span></a>
</li>
<li>
<a title="android定位和地图开发实例" href="/lib/view/open1328756009421.html"><span class="title">android定位和地图开发实例 </span></a>
</li>
</ol>
</div>
<p class="aiBar"></p>
<div class="side-box post-nav" style="margin-top: 20px;">
<div class="title"><h3>阅读目录</h3></div>
<ul class="articleIndex"></ul>
</div>
</div>