SAX解析XML:学习
来源:互联网 发布:德拉诺飞行软件 编辑:程序博客网 时间:2024/05/01 17:18
SAX解析XML的学习
一,XML
(1)xml的定义:
xml是扩展标记语言。用于标记电子文件使其具有结构性的标记语言,可以用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。适合Web传输
(2)xml的优点
1.格式统一,有标准。 2.容易交互,数据共享比较方便。
(3)xml的缺点
1.文件庞大,文件格式复杂,传输占宽带。 2.需要大量代码来解析,使代码变的十分复杂。 3.解析方式不统一。 4.服务器端和客户端汇划费较多的资源和时间。
二,SAX
(1)SAX介绍
SAX是一个解析速度快并且占用内存少的XML解析器。
(2)SAX原理
SAX解析器是一种基于事件的解析器,把XML文档转化成一系列的事件来处理。基于事件源和事件处理器。
(3)SAX优点
不用实现调入整个文档,占用资源少。
(4)SAX缺点
数据是暂时的,如果没有保存就会造成数据的丢失。
(5)PS:
可以降低解析门槛,降低对设备的要求。
上代码吧,找了很多例子,最后把自己都绕进去了。到现在才明白了整个流程。
XML代码:
<?xml version="1.0" encoding="utf-8"?><persons> <person> <name>Alice</name> <age>30</age> </person> <person> <name>AXX</name> <age>18</age> </person></persons>
XML对应类代码:
/** * Created by hanlei on 2017/7/18. */public class Person { private String name; private int age; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; }}
解析类对应代码:
import android.os.Handler;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;import java.util.ArrayList;import java.util.List;/** * Created by hanlei on 2017/7/18. */public class SAXForHander extends DefaultHandler{ private List<Person> persons; private String perTag; Person person; public List<Person> getPersons(){ return persons; } //接收文档开始,用于预处理。 //开始解析文档 @Override public void startDocument() throws SAXException { persons=new ArrayList<Person>(); System.out.println("startDocument()"); } //开始解析结点 //接收元素开始的通知。读到一个开始标签的时候,会触发这个方法。其中url表示元素的命名空间 //localName表示元素的本地名称,qName表示元素的限定名;attrs表示元素的属性集合。 @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("person".equals(qName)) { person=new Person(); } perTag=qName; System.out.println("读取结点"); } //保存结点内容 //接收字符数据的通知。该方法用来处理在XML文件中读取的内容。 //第一个参数用来存放文件的内容。 //后面两个参数是读到的字符串在这个数组中的起始位置和长度。 //使用new String(ch,start,length)就可以获取内容。 @Override public void characters(char[] ch, int start, int length) throws SAXException { String data=new String(ch,start,length).trim();//trim去掉两边空格。 if(!"".equals(data.trim())) { System.out.println(data.trim()); } System.out.println(perTag); if("name".equals(perTag)) { person.setName(data); } else if("age".equals(perTag)) { person.setAge(Integer.parseInt(data)); } } //结束解析节点 //接受到文档的结尾的通知。在遇到结束标签的时候,调用方法。uri表示元素的命名空间。 //localName表示元素的本地元素;qname表示元素的限定名。 @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("endElement"); if("person".equals(qName)) { persons.add(person); person=null; } perTag=null; } //文档解析结束 @Override public void endDocument() throws SAXException { System.out.println("emdDcument"); }}
测试类对应代码:
package com.example.hanlei.xml_718;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.xml.XMLConstants;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * Created by hanlei on 2017/7/18. */public class AnalyzeSAM { public void sss() throws ParserConfigurationException, SAXException, IOException { InputStream inputStream=new FileInputStream("xiwang.xml"); //SAXParserFactory: Defines a factory API that enables applications // to configure and obtain a SAX based parser to parse XML documents. //SAXParserFactory:定义工厂API,使应用程序能够配置和获取基于SAX的解析器来解析XML文档。 //SAXParserFactory:拿到SAX解析器。 //newInstance:Obtain a new instance of a SAXParserFactory. //newInstance:获得一个工厂中的一个新实例。解析器的实例化。 //SAXParser: In JAXP 1.0, this class wrapped the Parser interface //SAXParser:解析器接口 //newSAXparser:Creates a new instance of a SAXParser using // the currently configured factory parameters. //newSAXparser:创建一个SAXParser实例使用当前配置的工厂参数 SAXParserFactory spf=SAXParserFactory.newInstance(); SAXParser saxParser=spf.newSAXParser(); SAXForHander hander= new SAXForHander(); saxParser.parse(inputStream,hander); List<Person> persons=hander.getPersons(); inputStream.close(); for(Person person:persons) { System.out.println("name:"+person.getName()); System.out.println("Age:"+person.getAge()); } } public static void main(String []args) throws IOException, SAXException, ParserConfigurationException { new AnalyzeSAM().sss(); }}
结果显示:
完成时间:2017年7月19日03:06:42
晚安啦。
阅读全文
0 0
- XML学习《SAX解析》
- 学习sax解析xml
- SAX解析XML:学习
- Android学习-Sax解析XML
- XML学习之SAX解析XML文件
- SAX解析xml学习笔记[1]
- Java解析XML学习笔记(SAX篇)
- xml学习笔记(5)sax解析
- Android学习笔记--解析XML之SAX
- android学习笔记16: SAX解析XML
- 学习笔记--sax解析xml文档
- android 学习笔记 SAX 解析XML数据
- XML语言学习4--SAX解析
- android SAX解析XML学习笔记
- XML学习总结-SAX解析-(三)
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- sql 安装过程和安装密钥
- SQL中语句:UNION all与UNION 的用法与区别
- 如何解决BIGINT UNSIGNED value is out of range
- 对象导论以及对象之间的几种关系的总结
- 从源码的角度看Activity是如何启动的
- SAX解析XML:学习
- Python 异常处理
- 为CSDN博客添加站内搜索栏目
- 运算符
- python爬取晋江手机界面的链接
- S3C2440 cp15协处理器详解
- 慕课网学习spring入门篇-AOP基本概念
- 函数调用背后那点事
- poj 1815 Friendship 求字典序最小的最小割