Android学习笔记--XML文件解析

简介:
MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0
  1 . 什么是SAX

Simple API for XML , 既是指一种接口 也是指一个软件包
作为接口 , SAX是事件驱动型XML解析的一个标准接口

2 . SAX基本原理

SAX的哦给你工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束,元素(element)开始与结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束.

大多数SAX实现都会产生一下类型的事件
{
在文档的开始和结束时出发文档处理事件
在文档内每一XML元素接受解析的前后触发元素事件
任何元数据通常都由氮素的事件交付
在处理文档的DTDSchema时产生DTDSchema事件
产生错误事件用来通知主机应用程序解析错误
}

Android学习笔记--XML文件解析 - 無牽℡↘嘸褂 - 菁华隐没℡↘芳流歇绝



3 . SAX常用接口

ContentHandler接口
ContentHandlerjava类包中一个特殊的SAX接口,位于org.xml.sax包中.该接口封装了一些对事件处理的方法,XML解析器开始解析XML输入文档时,它会遇到某些特殊的事件,比如文档的开头和结束,元素的开头和结束,以及元素中的字符数据等事件.当遇到这些事件时,XML解析器会调用ContentHandler接口中相应的方法来响应该事件

ContnetHandler接口的方法有以下几种
{
Void startDocument();

Void endDocument();

Void startElement(String  uri , String localName , string qName , Attributes atts)

Void endElement(String uri , String  localName , String qName)

Void characters(char[] ch , int start , int length)
}


4 . SAX解析
解析文档过程
例 : <doc>
<para>Hello World!</para>
</doc>
在解析文档的过程中会产生如下一系列事件

Start document {
Start element: doc A: 创建事件处理程序
Start element: para              
Characters: Hello World!             B: 创建SAX解析器
End element: para
End element: doc C: 将事件处理程序分配给解析器 D: 对文档进行解析 将每个事件发送给处理程序
End document }


  解析样例 :   1 . 声明控件对象(略)
2 . 获得控件对象(略)
3 . 绑定事件(略)
4 . 创建监听器对象 

Public void onClick(View v) {
HttpDownloader hd = new HttpDownloader();
String resultStr = hd.download("XMLURL");
System.out.priintln(resultStr);

Try {
// 创建一个SAXParseFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader reader = factory.newSAXParser().getXMLReader();
// 为XMLReader设置内容处理器 MyContentHandler
reader.setContentHandler(new MyContenHandler());
// 开始解析文件  字符串构造成reader 之后构造成inputSource
Reader.parse(new InputSource(new StringReader(resultStr)));
} catch (Execption e) {
e.printStackTrace();
}
}

XML文件写法 : 
<wordkers>
<worker id="AQ01">
<name>mark</name>
<sex>male</sex>
<status>manager</status>
<address>New York</address>
<salary>$4000</salary>
<worker id="AQ02">
<name>lily</name>
<sex>female</sex>
<status>assists</status>
<address>H</address>
<salary>$2000</salary>
<worker id="AQ03">
<name>tom</name>
<sex>male</sex>
<status>manager</status>
<address>F</address>
<salary>$5000</salary>
</wordkers>

MyContenHandler的写法 例 : 
Public class MyContenHandler Extends DefaultHandler { // 此处体现了适配器模式
String Name , Sex , Status , Address , Salary
String tagName;

// 开始document
Public void startDocument() throws SAXExecption {
System.out.println("-------begin--------");
}

// 结束document
Public void endDocument() throws SAXExecption {
System.out.println("-------end--------");
}

// 开始节点对象
Public void startElement(String namespaceURI , String localName , String qName , Attributes attr) throws SAXExecption {
tagName = localName ;
If (localName.equals("worker")) {
// 获取标签的全部属性
For (int i = 0 ; i < attr.getLength(); i ++) {
System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i))
}
}
}

// 结束节点对象
Public void endElement(String namespaceURI , String localName , String qName ) throws SAXExecption {
// 在一个标签解析完之后,打印所有标签的信息
If (localNmae.equals("worder")) {
This.printout();
}
}

// 读取文本对象
Public void characters(char[] ch , int start , int length) throws SAXExecption {
If (tagNmae.equals("name")) 
Hisname = new String(ch , start , length);
Else if (tagNmae.equals("sex"))
Sex = new String(ch , start , length);
Else if (tagNmae.equals("status"))
Status= new String(ch , start , length);
Else if (tagNmae.equals("address"))
Address= new String(ch , start , length);
Else if (tagNmae.equals("salary"))
Salary= new String(ch , start , length);
}

// 打印读出的信息
Public void printout() {
System.out.println("name--->" + Name);
System.out.println("name--->" + Sex);
System.out.println("name--->" + Status);
System.out.println("name--->" + Address);
System.out.println("name--->" + Salary);

}

}





     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360566,如需转载请自行联系原作者



相关文章
|
12月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
353 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
3125 1
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
554 15
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
366 0
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
1294 8
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
371 1
|
XML JavaScript Java
java与XML文件的读写
java与XML文件的读写
222 3

热门文章

最新文章

推荐镜像

更多
  • DNS