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回收:而这里就把我之前的一篇内存泄漏的总 ...
随机推荐
- 利用SecureCRT上传、下载文件(使用sz与rz命令)
sz用法: 下载一个文件 sz filename 下载多个文件 sz filename1 filename2 下载dir目录下的所有文件,不包含dir下的文件夹 sz dir/* 下载文件存放位置在s ...
- Eclipse启动Tomcat,45S超时问题解决
在Eclipse中启动Tomcat服务器时,经常由于系统初始化项目多,导致出现45秒超时的Tomcat服务器启动错误. 以前我一般通过找到XML配置文件,将对应Timeout为45的值,修改为 ...
- js实现table排序-sortable.js
方案一.引用sortable.js包 /* <th class="thcss" style="width: 40px;" onclick="so ...
- jsp 学习 第3步 - el 自定义方法 tld 说明
使用 el 的过程中,需要使用到后端代码处理逻辑,这个时候我们就需要自定义 方法. 如我们后端代码定义如下: package com.rhythmk.common; public class FncH ...
- HNU 12826 Balloons Colors
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12826&courseid=268 #include&l ...
- spring+hibernate常见异常集合
spring+hibernate出错小结: (1)java.lang.NoClassDefFoundError: org/hibernate/context/CurrentSessionContext ...
- 利用cocostudio库函数 实现左右滑动的背包栏UI (cocos2d-x 2.2.0)
.h #ifndef __COMMON_COMPONENTS__ #define __COMMON_COMPONENTS__ #include "cocos2d.h" #inclu ...
- 26.打印所有和为S的连续正整数序列[FindContinuousSequencesWithSumS]
[题目] 输入一个正数n,输出所有和为n连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. [分析] 这是网易的一道面试题.这道 ...
- Android 阅读Tasks and Back Stack文章后的重点摘抄
这篇文章是做android的必读篇目,要仔细阅读,原文连接http://developer.android.com/guide/components/tasks-and-back-stack.html ...
- mysqldump备份
备份工具1.mysqldump(数据量很大时不推荐使用) myisam 锁表 innodb 行锁 mysqldump --help | less #查看mysql所有的语法 mysqldu ...