在Android上的xml解析方法又三种,SAX,DOM,和Pull解析器,关于这三种方案的解析效率其实本质上是没什么区别的,但是我们在编程的时候根据不同的需求进行选择,比如只需要读取xml内容的时候,我们就可以选择SAX或者Pull进行,因为这个解析方案所占用的内存比较小,对于CPU的负荷占有也比较小,但是如果需要对xml进行写操作则就必须使用DOM来做。打个比方,Pull和SAX解析就好比是走马观花,看到什么就拿什么,但是dom的话就是一个逐句逐个的进行解析,由于时间限制,暂时就介绍一个SAX解析,因为这个比较常用,下面是SAX解析器的主程序代码:
首先定义一个解析方法类MyHandler,也就是相当于解析算法,这个类是继承DefaultHandler的
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader=factory.newSAXParser().getXMLReader();
reader.setContentHandler(MyHandler);// 为xmlReader设置内容处理器
reader.parse(new InputSource(new StringReader(result)));// 开始解析文件
如果我们要解析的xml文件内容为:<LoginDescriptor>
<!--
状态(0:失败,1:成功)
-->
<State>0</State>
<!—状态信息 -->
<Message>xxxx</Message>
<!--
用户编号 -->
<UserID>xxx</UserID>
</LoginDescriptor>
<!--EndFragment-->
,则我们定义的SAX解析算法为:
public class LoginDB extends DefaultHandler {
private Login obj = null;
// public static String State,UserID,Message,Model;//声明变量
private String tagName;
// 读取根
@Override
public void startDocument() throws SAXException {
obj = new Login();
System.out.println("======begin=========");
}
// 开始读取元素
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
this.tagName = localName;
super.startElement(uri, localName, qName, attributes);
}
// 读取内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (tagName.equals("UserID")) {
obj.setUserID(new String(ch,start,length).toString());
System.out.println("UserID = " + new String(ch, start, length));
} else if (tagName.equals("State")) {
obj.setState(Integer.parseInt(new String(ch, start, length)
.toString()));
} else if (tagName.equals("Message")) {
obj.setMessage(new String(ch, start, length).toString());
}
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
}
@Override
public void endDocument() throws SAXException {
System.out.println("======end=========");
}
// 取值
public Login getLoginList() {
return obj;
}
}
Login是一个简单的类,里面就只有set和get方法:
public class Login {
private int HttpStatus; // HTTP状态 0 表示成功,1 表示失败
private int State; // 状态
private String Message; // 提示消息
private String UserID; // UserID
private String Model; // 机型
、、、、、、、
}
分享到:
相关推荐
JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax JDK自带xml解析器dom+sax
XML文件解析器 支持dom解析和sax模式解析,c语言实现
虽然SAX(Simple API for XML)解析器是解析XML十分方便的工具,但开发和维护SAX解析器是十分困难的,本文会告诉你如何使用XML Schemas中的信息来生成一个SAX解析器的框架源码,并且完成解析xml的技术
在Android中,常见的XML解析器分别为SAX解析器、DOM解析器和PULL解析器. 这里的源代码介绍的是Android XML解析之SAX方式
NULL 博文链接:https://lujo20121128.iteye.com/blog/1736765
xml
SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备。 SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符...
利用JSP直接读写XML文件,分别用DOM解析器和SAX解析器加以实现,非常适合初学者入门,作为一个了解jsp与XML的台阶
一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。由使用者定义回调函数,解析时,若发生事件的话会被调用。SAX事件包括: XML 文字 节点 XML 元素 节点 XML 虚理指令 ...
SAX是一种解析速度快并且占用内存少的XML解析器,非常适用于Android的移动设备。 SAX采用事件驱动`,也就是说,它并不是需要解析完整的文档,在按内容顺序解析文档的过程中,Sax会判断当前读到的字符是否符合XMl语法...
不同于SAX和DOM的XML高效解析器,内存占用少,速度快,支持XPATH;用多种语言实现,C,JAVA等
XML的四种解析器(dom,sax,jdom,dom4j)原理及性能比较,超详细XML的四种解析器原理及性能比较,超详细
用C#编写的XML解析器,DOM和SAX都有实现
Mini-XML 是一个小型 XML 解析库,您可以使用它来读取应用程序中的 XML 数据文件或字符串,而无需大型非标准库 读取 UTF-8 和 UTF-16 并写入 UTF-8 编码的 XML 文件和字符串。 数据存储在链表树结构中,保留 XML ...
XML处理器(通常称为解析器) Web 应用程序的基本构建快 解析 XML 并为应用程序提供其所需的信息 解析器的类型 进行验证的解析器 检查 XML 文档的有效性和格式规范 不进行验证的解析器 检查 XML 文档的格式规范
XML解析有三种方式 1,DOM 通用性强,它会将XML文件的所有内容读取到内存中,然后使用DOM API遍历XML树、检索所需的数据; 优点:简单直观,但需要将文档读取到内存, 缺点:并不太适合移动设备; 2,SAX SAX是一...
本文档详细的给出了XML的介绍和XML解析的实例。包括DOM4J和SAX解析,节点的名和值得读取,属性的读取。生成XML文件等
webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...
XML程序设计第7章SAX解析器
利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器。 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处理器则负责对事件作出相应,对传递的XML数据进行处理。 1、对大型文件...