XML及PullParser解析

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一.什么是xml1、概念:extensive markup language(可扩展的标记语言)

XML是一种通用的数据存储和交换格式,与平台无关,与编程语言无关,与操作系统无关。给数据集成和交互提供了极大的便利。将数据格式化成XML文件后,真正实现了据跨平台的交互和共享。在不同语言中,xml的解析方式都一样。

2、XML的解析:xml parse

对xml文件进行阅读和分析,提取出希望的数据和数据属性。在android开发中,将xml解析后,把数据放进List<Map<String, Object>>集合中是我们的最终目的。

3、 XML的解析方式:

DOM(document object model :文档对象模型):借助文档树模型对xml文档进行分析

SAX(simple API for xml :xml的简单api):利用事件流的形式解析XML

PULL:利用事件流模型来解析XML

备注:DOM和SAX解析的优劣分析:DOM是将文档一次性读入到内存,然后以文档树模进行分析节点信息。获取到希望获取的数据;而SAX是事件流的形式去分析xml文件。 DOM可以做到对文档中部分节点的修改、删除和新增,而SAX无法做到。

4、XML文件格式:

每一个XML有且只有一个根节点;

XML文件的数据中不可以 出现"< "或者" >";

二、DOM解析xml1、核心类:

DocumentBuilderFactory

DocumentBuilder

Doucment

Element

NodeList

Node

2、核心代码:

DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();//使用工厂来实例化一个构造Document的对象DocumentBuilder builder =factory.newDocumentBuilder();//利用DocumentBuilder来构造一个Document对象Document document =builder.parse(filename);//获取Document文档的根节点对象Element root =document.getDocumentElement();//通过根节点,获取到根节点下面的所有二级子节点NodeList nodeList =root.getChildNodes();//遍历子节点,获取内部的每一个节点for(inti = 0; i < nodeList.getLength(); i++) {

Node node=nodeList.item(i);//获取每个末端阶段的文本值和节点名称,将其存入到Map对象中map.put(item.getNodeName(), item.getTextContent());

list.add(map);

}

三、PULL解析xml1、核心类:

XmlPullParserFactory

XmlPullParser

2、核心代码:

1//实例化一个xml pull解析的工厂2XmlPullParserFactory factory =XmlPullParserFactory.newInstance();3//实例化一个xml pull解析对象4XmlPullParser pullParser =factory.newPullParser();5//将xml文件作为流传入到inputstream6BufferedInputStream bis =newBufferedInputStream(7newFileInputStream("customers.xml"));89//xml解析对象接收输入流对象10pullParser.setInput(bis, "utf-8");1112intevent =pullParser.getEventType();13List<Map<String, Object>> list =null;14Map<String, Object> map =null;1516while(event !=XmlPullParser.END_DOCUMENT) {17switch(event) {18caseXmlPullParser.START_DOCUMENT:19list =newArrayList<>();20

break;21caseXmlPullParser.START_TAG:22if("customer".equals(pullParser.getName())) {23map =newHashMap<String, Object>();24}25if(pullParser.getName().equals("name")) {26map.put("name", pullParser.nextText());27}28if(pullParser.getName().equals("tel")) {29map.put("tel", pullParser.nextText());30}31//if (pullParser.getName().equals("email")) {32//map.put("email", pullParser.nextText());33//}34

break;35caseXmlPullParser.END_TAG:36if(pullParser.getName().equals("customer")) {37list.add(map);38}39

break;40}41event =pullParser.next();42}

3、pull解析方式和dom解析的区别:

pull解析中使用了switch case,所以可以获取客户希望获取到的内容,而不用对整个xml文件进行解析。

4、pull parser的使用:(简单易用)

只有一个关键方法key(),用于检索下一个事件,只有五个事件类型。

四、DOM TREE结构中对节点的分类1、文档节点

2、元素节点

3、属性节点

4、文本节点

5、注释节点

五、PULL PARSER中的几种event值:1、START_DOCUMENT: 0

2、END_DOCUMENT: 1

3、START_TAG: 2

4、END_TAG: 3

5、TEXT: 4

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航