XMLSAX解析
* HTML不区分大小写,XML区分大小写
* 用浏览器打开xml文件,判断xml文件是否有错
* xml与html的区别
1:xml的标记可以自定义,但是html标记不可以定义。<student></student>
2:作用上。xml目的是为了传输数据,但是html更多的是为了显示数据。
3:xml语言区分大小写。但是html不区分大小写
4:xml文件的后缀为xml,html文件的后缀为html或者htm
* xml文件的组成:前导区和数据区
前导区:<?xml version="1.0" encoding="utf-8" ?>
数据区
<books>
<book>
<id>1</id>
<name>android实战教程</name>
<price>87.23</price>
</book>
</books>
* java源码在jdk中src里面
XML解析
* 首先要继承DefaultHandler,重写startDocument、endDocument、startElement、endElement、characters方法
public class StudentHandler extends DefaultHandler {
private List<Student> list;
private Student stu;
private String tag;// 保存标记名
// 返回解析到的集合。
public List<Student> getList() {
return list;
}
@Override
public void startDocument() throws SAXException {
System.out.println("文档开始解析");
list = new ArrayList<Student>();
}
@Override
public void endDocument() throws SAXException {
System.out.println("文档解析结束");
}
// 开始标记
// qName;表示标签名
// attributes:属性集合
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
tag = qName; //student id
if ("student".equals(tag)) {
stu = new Student();
//遍历属性。
for(int i=0;i<attributes.getLength();i++){
String name = attributes.getQName(i);
String value = attributes.getValue(i);
System.out.println(name+"---"+value);
//判断属性名称
if("id".equals(name)){
stu.id = Integer.parseInt(value);
}
}
}
}
// 结束标记
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if ("student".equals(qName)) {
list.add(stu);
}
tag = "";
}
// 标记与标记之间的内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String str = new String(ch, start, length);
System.out.println(str);
// 判断标记
if ("name".equals(tag)) {
stu.name = str;
} else if ("age".equals(tag)) {
stu.age = Integer.parseInt(str);
}
}
启动方法
//得到解析工厂。
SAXParserFactory factory = SAXParserFactory.newInstance();
//通过工厂得到解析器。
SAXParser parser = factory.newSAXParser();
StudentHandler handler = new StudentHandler();
//将文件和Handler,和解析器相关联。
parser.parse("f:\\students.xml", handler);
//需要得到解析后的集合。
List<Student> list = handler.getList();
for(Student s:list){
System.out.println(s);
}
* 安卓中xml默认解析方式是pull
优点:
SAX 对内存的要求比较低,因为它让开发人员自己来决定所要处理的标签.特别是当开发人员只需要处理文档中所包含的部分数据时,SAX 这种扩展能力得到了更好的体现.
缺点:
用SAX方式进行XML解析时,需要顺序执行,所以很难访问到同一文档中的不同数据.此外,在基于该方式的解析编码过程也相对复杂.
使用场景:
对于含有数据量十分巨大,而又不用对文档的所有数据进行遍历或者分析的时候,使用该方法十分有效.该方法不用将整个文档读入内存,而只需读取到程序所需的文档标签处即可.
XMLSAX解析的更多相关文章
- SAX解析
SAX解析工具- Sun公司提供的.内置在jdk中.org.xml.sax. 核心的API: SAXParser类: 用于读取和解析xml文件对象 parse(File f, DefaultHandl ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
- .NET Core中的认证管理解析
.NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新
上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Asp.Net WebApi核心对象解析(下篇)
在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...
- 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye
一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...
随机推荐
- Entity Framework Fluent API
前言 使用DataAnnotation非常简单,但对于EntityFramework中的特性,就要在实体类中引入EntityFramework程序集,但实体类最好能是保持与架构无关性的POCO类,才能 ...
- Kalendar server Beijing Tiandiyuandian Technology Limited 果然是木马
我的Windows 7 系统,在开始菜单里面输入msconfig ,回车打开系统配置,隐藏所有Microsoft的进程,在服务和启动项里面都有 Kalendar server Beijing Ti ...
- [BZOJ1941][Sdoi2010]Hide and Seek
[BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...
- 最长回文子串O(n)算法
原文链接:英文版链接 首先,我们将字符串S中插入符号“#”转化成另一个字符串T. 比如:S = "abaaba",T = “#a#b#a#a#b#a#”. 为了找到最长回文字串,我 ...
- NOIP 2011 Day 1 部分题解 (Prob#1 and Prob#2)
Problem 1: 铺地毯 乍一看吓cry,地毯覆盖...好像是2-dims 线段树,刚开头就这么难,再一看,只要求求出一个点,果断水题,模拟即可.(注意从标号大的往小的枚举,只要有一块地毯符合要求 ...
- Java正则表达式的最简单应用
String emailRegex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"; Pattern pat = ...
- Junit4测试
1.junit初级入门 2.常用注解 3.运行流程 4.测试套件使用 5.参数化设置
- 【转】 JSONObject使用方法
随笔- 46 文章- 0 评论- 132 JSONObject简介 本节摘要:之前对JSON做了一次简单的介 绍,并把JSON和XML做了一个简单的比较:那么,我就在想,如果是一个json格式的字 ...
- cocos2dx3.0rc导出自定义类到lua的方法
以前要导出c++类到lua,就得手动维护pkg文件,那简直就是噩梦,3.0以后就会感觉生活很轻松了. 转载请注明出处http://www.cnblogs.com/mrblue/p/3637910.ht ...
- css3学习总结1--CSS3选择器
CSS3的属性选择器主要包括以下几种: 1. E[attr^="value"]:指定了属性名,并且有属性值,属性值是以value开头的: 2. E[attr$="valu ...