开发者学堂课程【XML入门 :sax 解析的过程】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/37/detail/859
sax 解析的过程
内容介绍
一、sax 解析的原理
二、sax 解析
一、sax 解析的原理
解析 xml 的两种技术/方式
1.dam:
根据 xml 的层级结构在内存中分配一个树形结构
把 xml 中标签,属性,文本封装成对象
2.sax:
写一个事件驱动,边读边解析
二、sax 解析
1.sax 方式
找到 Java_API 文档 ,jmp 方式在 Javax.xml.parsers 包下。所以要找到 Javax.xml.parsers
点击 Javax.xml.parsers
首先上面两个类是 dam 方式,上面两类是 sax 方式
sax 方式有两类:SAXParser、SAXParserFactory
点击 SAXParser,出现下图
SAXParser 是一个抽象类
此类的实例可以从 SAXParserFactory.newSAXParser() 方法获得(图中可找到)
点击 SAXParserFactory,出现下图
向下滑,可以找到得到工厂实例
SAXParserFactory 也是抽象类
实例 newInstance() 方法得到
2.SAXParser 解析
首先点击 SAXParser,找到解析方法
(1)parse(File f, DefaultHandler dh)
有两个参数:xml 的路径、事件处理器
点击 parse(File f, DefaultHandler dh) 中的 DefaultHandler
DefaultHandler 是一个默认的 API 处理器,观察 DefaultHandler 里的方法(只需要记住其中三种)
①startElement(开始元素、开始标签)
startElement(String uri, String localName, String qName, Attributes attributes)
接收元素开始的通知。
② endDocument(结束)
endElement(String uri, String localName, String qName)
接收元素结束的通知。
③ characters
characters(char [] ch, int start, int length)
接收元素中字符数据的通知。
3.画图分析 max 执行过程
(1)有一个 xml 文件
<?xml version=”1.0”?>
<root>
<head>
<title>exemple</title>
</head>
<body>
<p>content1</p>
<p>content2</p>
</body>
<foot>
<author name=”lisi”/>
</foot>
</root>
(2)执行 parse 方法,传递两个参数
一个是 xml 路径
一个是事件处理器
**当把事件处理器传递进来,相当于在方法里面绑定了一个事件
(3)事件处理执行:会用到三个方法
①startElement(String uri, String localName, String qName, Attributes attributes)
②characters(char [] ch, int start, int length)
③endElement(String uri, String localName, String qName)
(4)在里面执行会自动执行事件
在 xml 文件中,<root> 是开始标签,</root> 是结束标签。
①解析的时候,当执行到<root>的时候,就会自动调用 startElement(String uri, String localName, String qName, Attributes attributes)
方法,当自动调用方法之后,就可以通过qName参数把标签名称返回;当执行到<head>的时候,还是会自动调用 startElement(String uri, String localName, String qName, Attributes attributes)
方法;当执行到<title>的时候,还是会自动调用 startElement(String uri, String localName, String qName, Attributes attributes)
方法。只要是开始标签都是执行 startElement(String uri, String localName, String qName, Attributes attributes)
方法。
②xml 文件中,exemple 是一个文本,当执行到文本的时候,就会自动调用characters(char [] ch, int start, int length)
方法。文本方法有三个参数,三个参数是 string 的构造方法,它们是为了返回文本内容。
③当执行到/开头(</title>),就自动调用endElement(String uri, String localName, String qName)
方法,qName 参数:返回标签名称;当执行到</head>,还是会自动调用 endElement(String uri, String localName, String qName)
方法;当执行到最后一个</root>,还是自动调用 endElement(String uri, String localName, String qName)
方法。
(5)注意:
①当解析到开始标签时候,执行 startElement 方法,参数 qName:返回标签名称
②当解析到文本内容时候,执行 characters 方法,通过 string 的构造方法返回内容
③当解析到结束标签时候,执行 endElement 方法,参数 qName:返回标签名称