在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; // 机型
、、、、、、、
}
分享到:
相关推荐
SAX解析器以流式的方式读取XML文档,当遇到文档的各个元素时,会触发相应的事件,如开始文档、开始元素、结束元素、字符数据等。程序员通过实现SAX解析器的回调接口来处理这些事件,从而解析XML内容。这种方式使得...
Java解析XML数据主要涉及到...总的来说,SAX解析器是Java处理XML文档的一种高效方式,特别适合处理大文件或资源有限的情况。通过自定义事件处理器,我们可以灵活地解析XML文档中的特定信息,而不必一次性加载整个文档。
SAX(Simple API for XML)是XML解析器的一种,它采用事件驱动的方式对XML文档进行解析,而不是一次性加载整个文档到内存中,因此在处理大型XML文件时,SAX解析器具有较高的性能和较低的内存消耗。 标题“sax解析...
3. **事件处理**: 在解析过程中,SAX解析器会调用我们在`DefaultHandler`子类中定义的方法。例如: - `startElement(String uri, String localName, String qName, Attributes attributes)`:当遇到开始元素时,uri...
相较于DOM(Document Object Model)解析器,SAX解析器占用更少的内存和处理时间,因为它不会一次性加载整个XML文档到内存,而是采用事件驱动的方式逐个处理XML元素。在本项目中,"saxloadxml"应该是实现了一个SAX...
首先,SAX解析器以流式方式读取XML文档,当遇到文档的不同部分时,会触发相应的事件,如开始文档、开始元素、结束元素等。开发者可以注册事件处理器来响应这些事件,从而获取XML元素的信息。 1. **初始化解析器**:...
在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...
SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...
总结来说,C语言中的XML解析涉及到DOM和SAX两种模式,DOM适合小到中型XML文件,提供方便的数据访问和修改;SAX则适合大型XML文件,以节省内存。Xerces-C++库为这两种解析方式提供了强大的支持,通过注册事件处理器或...
代码示例中没有给出完整的SAX解析器实现,但通常会包括`SAXParserFactory`创建`SAXParser`,然后使用`parse`方法解析XML文件,并传入自定义的`DefaultHandler`子类实例。 总结: DOM解析器适合对XML文档进行随机...
- SAX解析器逐行读取XML文件,当遇到文档的开始、元素开始、元素结束、文本内容、注释等事件时,会调用预先注册的处理器接口(如`ContentHandler`)中的方法。 - 解析器并不关心这些事件的具体处理,只负责触发...
首先,我们需要引入SAX解析器的依赖库,通常这可以通过在项目构建配置中添加JAXB或Xerces实现来实现。 ```java // 引入必要的库,如使用Java内置的SAX解析器,通常无需额外导入 // 如果使用第三方库,例如Apache ...
SAX解析器遵循XML规范,如XML 1.0或XML 1.1。 2. **事件处理程序(Event Handler)**:当解析器读取XML文档时,会调用预先注册的事件处理程序方法,例如startElement()、endElement()、characters()等。 3. **解析...
SAX解析器以流式方式读取XML文档,遇到元素、属性等结构时会触发相应的事件回调。开发者需要定义一个ContentHandler类来处理这些事件,如开始元素、结束元素、字符数据等。这种方式避免了整个XML文档加载到内存中,...
SAX解析器逐行读取XML文档,当遇到如文档开始、元素开始、元素结束、属性等结构时,会触发相应的事件,并调用用户定义的处理器方法。这种方式使得SAX解析相比DOM(Document Object Model)更加轻量级和高效,因为它...
标题中提到的"XML通过SAX解析为JSON格式"是指使用SAX解析器来读取XML文档,并将其转换成等效的JSON对象。SAX解析器以流式方式处理XML,当遇到文档的不同部分(如开始标签、结束标签、文本节点等)时,会触发相应的...
而SAX解析器则是事件驱动的,逐个处理XML元素,适合处理大型XML文件,因为它不需要一次性加载整个文档。 在"Parse XML"这个子VIs中,你可能看到包含以下功能的模块: 1. XML文件选择器:用户可以通过这个界面组件...
本压缩包文件“XML-java.rar”包含了关于使用Java解析XML的实例,特别强调了SAX解析器的使用,并且提到了使用JDOM和JOM4J这两个Java库来处理XML。 1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中...
常见的 XML 解析器有 DOM、SAX、JDOM 和 DOM4J 等。每种解析器都有其特点和优缺,选择合适的解析器对应用程序的性能和开发效率有很大影响。 1. DOM 解析器 DOM(Document Object Model)是 W3C 官方标准,用于表示...
SAX解析器以事件驱动的方式工作,它读取XML文档,当遇到文档的开始、元素开始、元素结束、文本内容等事件时,会触发相应的回调函数。这种方式避免了整个文档加载到内存中,适合处理大文件或资源有限的环境。 以下是...