Xml的解析
有时候我们与服务器交互的时候,服务器会返回数据通知客户端,数据的格式有两种 XML与
JSON,我们需要将返回的数据转换成Bean对象。以下介绍如何将xml转换成bean.解析xml的几种方式:
-
Dom解析DOM(文档对象模型)是W3C标准,提供了标准的解析Xml方式,但其解析效率一直不尽如人意,这是因为DOM解析XML文档时,把所有内容一次性的装载入内存,并构建一个驻留在内存中的树状结构(节点数)。如果需要解析的XML文档过大,或者我们只对该文档中的一部分感兴趣,这样就会引起性能问题。 特性:基于树状的xml的结构 支持:Dom4j dom4j是一个Java的XML API,它也是一个开放源代码的软件,是jdom的升级品,用来读写XML文件的。
-
SAX解析 SAX(Simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法,它既是一个接口,也是一个软件包.但作为接口,SAX是事件驱动型XML解析的一个标准接口不会改变 SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
-
Pull解析Pull是Android内置的xml解析器。Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送。
Pull开发步骤:
1. 创建一个Pull解析器
2. 将文件读进来
3. 开始解析文档 *判断如果没有读取文档完毕 就循环遍历拿到开标签
拿到开标签后面的文本 pullParser.nextText();移动游标
String result="";
try {
//1. 创建Pull解析器
XmlPullParser pullParser = Xml.newPullParser();
//2. 获取 件的输 流
InputStream is = c.getAssets().open("weather.xml");
//3. 将 件流绑定Pull解析器
pullParser.setInput(is, "utf-8");
//4. 获取当前的事件类型:开始 档、结束 档、开始标签、结束标签、 本
int eventType = pullParser.getEventType();
//5. 只要事件类型不是最后的 档类型 就往下读取
while (eventType!=XmlPullParser.END_DOCUMENT) {
//7. 如果是开始标签并且标签名为string
if (eventType==XmlPullParser.START_TAG
&&pullParser.getName().equals("string")) {
result+=pullParser.nextText()+"\n";
}
//6. 移动游标
eventType=pullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}