一、XML介绍
- XML:Extensible Markup Language,即可扩展标记语言. 用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.
- 举例如下:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2014</year>
<price>89</price>
</book>
<book id="2">
<name>安徒生童话</name>
<author>安徒生</author>
<year>2004</year>
<price>77</price>
</book>
</bookstore>

二、XML解析介绍
1.DOM解析
- DOM(Document Object Model) 是一种用于XML文档的对象模型,可用于直接访问 XML 文档的各个部分。它是一次性全部将内容加载在内存中,生成一个树状结构,它没有涉及回调和复杂的状态管理。
缺点是加载大文档时效率低下。
- 常用方法:
1.Document:getElementsByTagName(节点名称); -->根据节点名称获取列表
2.Nodelist:getChildNodes(); -->获取当前节点所有子节点
3.getAttributes(); -->获取当前节点所有属性和值
4.getNodeValues(); -->获取当前节点的值
5.getTextContent(); -->获取当前节点的文本
6.getNodeName(); -->获取当前节点名称
2.SAX解析
- SAX(Simple API for XML) 使用流式处理的方式,它并不记录所读内容的相关信息。它是一种以事件为驱动的XML API,解析速度快,占用内存少。使用回调函数来实现。缺点是不能倒退。
- 用法:
(1)自定义类继承DefaultHandler并重写四个方法
(2)获取SAX工厂 SAXParserFactory factory = SAXParserFactory.newInstance();
(3)获取解析器 SAXParser saxParser = factory.newSAXParser();
(4)设置解析 saxParser.parse(is,myHanlder);
3.Pull解析
- Pull 内置于 Android 系统中。也是官方解析布局文件所使用的方式。Pull 与 SAX 有点类似,都提供了类似的事件,如开始元素和结束元素。
不同的是,SAX 的事件驱动是回调相应方法,需要提供回调的方法,而后在 SAX 内部自动调用相应的方法。
而Pull解析器并没有强制要求提供触发的方法。因为他触发的事件不是一个方法,而是一个数字。它使用方便,效率高
- 常用方法:
(1) getEventType(); -->获取当前时间类型
(2) getAttributeValues(); -->获取标签属性
(3) next(); -->移动至下一个时间的类型
(4) nextText(); -->获取标签值
(5) setInput(); -->设置解析
三、XML解析实例
1.DOM解析
private void dom() {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
InputStream is = getAssets().open("book.xml");
Document document = builder.parse(is);
NodeList list = document.getElementsByTagName("book");
for(int i=0;i<list.getLength();i++){
BookBean bookBean = new BookBean();
Node node = list.item