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



相关文章
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
3193 1
|
8月前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
414 0
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
377 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
3868 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
587 15
|
Serverless 对象存储 人工智能
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
562 4
智能文件解析:体验阿里云多模态信息提取解决方案
|
Java API 数据处理
深潜数据海洋:Java文件读写全面解析与实战指南
通过本文的详细解析与实战示例,您可以系统地掌握Java中各种文件读写操作,从基本的读写到高效的NIO操作,再到文件复制、移动和删除。希望这些内容能够帮助您在实际项目中处理文件数据,提高开发效率和代码质量。
884 4
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
480 3
|
XML 前端开发 Java
讲解SSM的xml文件
本文详细介绍了SSM框架中的xml配置文件,包括springMVC.xml和applicationContext.xml,涉及组件扫描、数据源配置、事务管理、MyBatis集成以及Spring MVC的视图解析器配置。
378 1

推荐镜像

更多
  • DNS