* 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解析的更多相关文章

  1. SAX解析

    SAX解析工具- Sun公司提供的.内置在jdk中.org.xml.sax. 核心的API: SAXParser类: 用于读取和解析xml文件对象 parse(File f, DefaultHandl ...

  2. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

  3. .NET Core中的认证管理解析

    .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可 ...

  4. Html Agility Pack 解析Html

    Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面  用Fir ...

  5. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之二:资源文件热更新

    上一篇文章介绍了Dex文件的热更新流程,本文将会分析Tinker中对资源文件的热更新流程. 同Dex,资源文件的热更新同样包括三个部分:资源补丁生成,资源补丁合成及资源补丁加载. 本系列将从以下三个方 ...

  7. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  8. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  9. 【知识必备】内存泄漏全解析,从此拒绝ANR,让OOM远离你的身边,跟内存泄漏say byebye

    一.写在前面 对于C++来说,内存泄漏就是new出来的对象没有delete,俗称野指针:而对于java来说,就是new出来的Object放在Heap上无法被GC回收:而这里就把我之前的一篇内存泄漏的总 ...

随机推荐

  1. [Angularjs]asp.net mvc+angularjs+web api单页应用

    写在前面 最近的工作一直在弄一些h5的单页应用,然后嵌入到app的webview中.之前一直在用angularjs+html+ashx的一套东西.实在是玩腻了.然后就尝试通过asp.net mvc的方 ...

  2. wordpress编辑主题时报错Warning: scandir() has been disabled for security reasons in

    在ubuntu下面安装了一个wordpress程序,在后台什么都没干,编辑主题时,发现页面中报下面的错误. notice: /home/wwwroot/test.localhost/wordpress ...

  3. 查看域名对应的ip地址

    nslookup   www.google.com.hk

  4. 关于windows系统下 webpack的使用

    最近包子在研究webpack打包,发现,真是个好东西,以前完全不懂,其实很简单,步骤如下: 1.安装webpack嘎嘎嘎嘎~~~ 2.初始化一下 3.这玩意是啥,我不知道,就依葫芦画瓢 4.这玩意是啥 ...

  5. 三种dedecms调用相关文章的方法

    在文章的末尾或侧边栏添加相关文章可以提高用户的黏度,提高pv,增加se的好印象(哈哈),那么dedecms如何调用相关文章呢?有三种方法可以实现. 第一种dedecms调用相关文章的方法,用默认的li ...

  6. Crashing Robots(imitate)

    Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8124   Accepted: 3528 D ...

  7. CocoStudio基础教程(2)关联程序逻辑与cocoStudio导出文件

    1.概述 上篇说到将CocoStudio的导出文件在程序中运行出来,但是并没有用户交互,即点击响应,程序的逻辑判断也都没有.这篇中我们把它们加进去,这样就可以算一个完整的程序了. 2.界面编辑 大部分 ...

  8. 百度图片爬虫-python版

               self.browser=imitate_browser.BrowserBase()            self.chance=0            self.chanc ...

  9. MongoDB概述&语法

    Nosql DB 这是一个非关系型数据库. 通常我们的数据库有三类:  关系型数据库(RDBMS),联机分析处理数据库(OLAP),和菲关系型数据库(NoSql). MongoDB属于第三种,而且是一 ...

  10. JDBC之java数据库的连接与简单的sql语句执行

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...