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,如需转载请自行联系原作者



相关文章
|
20天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
28 1
|
20天前
|
Shell Android开发
Android系统 init.rc文件详解
Android系统 init.rc文件详解
38 0
|
3天前
|
XML API PHP
Android使用XML-RPC实现blog客户端
Android使用XML-RPC实现blog客户端
|
6天前
|
Java Android开发
Android12 双击power键启动相机源码解析
Android12 双击power键启动相机源码解析
17 0
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器是浏览器内置的工具,用于将XML转换为JavaScript可操作的XML DOM对象。这个DOM包含遍历、修改XML节点的函数。首先,XML文档需加载到DOM中,通过XMLHttpRequest对象实现,如示例所示:根据浏览器类型创建XMLHTTP对象,打开并发送GET请求到服务器获取&quot;books.xml&quot;,然后将响应转化为DOM对象。
|
2天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器是浏览器内置的工具,用于将XML转换为JavaScript可操作的XML DOM对象。通过DOM,可以进行节点的遍历、访问和修改。以下JS代码示例展示了如何加载XML文档&quot;books.xml&quot;:首先检查XMLHttpRequest支持,然后创建请求对象,打开并发送GET请求,最后将响应转化为DOM对象。
|
3天前
|
Android开发
android string.xml文件中的整型和string型代替
android string.xml文件中的整型和string型代替
|
3天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器是浏览器内置工具,用于将XML转换为JavaScript可操作的XML DOM对象,允许遍历、修改节点。大多数现代浏览器支持这一功能。以下JS代码示例展示了如何加载XML文档&quot;books.xml&quot;
|
3天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
6天前
|
Android开发
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
android 12 U盘 /mnt/media_rw 下读取文件异常 没有权限
10 0