JAXP解析XML之SAX解析
Jaxp解析XML之DOM解析:https://blog.csdn.net/sinat_32366329/article/details/80201544
什么是SAX解析
SAX(simple API forXML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。
DOM 和SAX对比
SAX |
DOM |
依序读入文件并产生相对应事件,可以处理任何大小的XML文件。 |
在内存中建立文件树,不适于处理大型的XML文件。 |
只能对文件按顺序剖析一遍,不支持对文件的随意存取 |
可以随意存取文件树的任何部分,没有次数限制 |
通常只去能读取XML文件内容,修改起来很麻烦 |
可以随意修改文件树,从而修改了XML文件
扫描二维码关注公众号,回复:
1037678 查看本文章
|
开发上比较复杂,需要自己来制作事件处理器 |
易于理解,易于开发 |
对工作人员更灵活,可以用SAX建立自己的XML对象模型 |
已经在DOM基础之上建立了文件树 |
Demo案例
Jaxp.xml
<?xml version="1.0" encoding="UTF-8"?> <department> <user no="001"> <name>郭靖</name> <six>男</six> <age>25</age> </user> <user no="002"> <name>黄蓉</name> <six>女</six> <age>20</age> </user> </department>
Java代码
package com.rabbit.sax; import org.junit.Test; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import java.io.IOException; /** * jaxp的sax解析 * Created by HASEE on 2018/5/5. */ public class JaxpSaxDemo { @Test public void test() throws ParserConfigurationException, SAXException, IOException { //创建SAXParserFactory工厂实例 SAXParserFactory sax = SAXParserFactory.newInstance(); //通过工厂方法获取SAXParser实例 SAXParser parser = sax.newSAXParser(); //创建XML解析器 XMLReader reader = parser.getXMLReader(); //设置自己的处理器对象 reader.setContentHandler(new MyContentHandler()); //解析XML reader.parse(this.getClass().getResource("/jaxp.xml").getPath()); } class MyContentHandler extends DefaultHandler { @Override public void startDocument() throws SAXException { System.out.println("开始读取Document"); } @Override public void endDocument() throws SAXException { System.out.println("结束读取Decument"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { System.out.println("</" + qName + ">"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { String str = new String(ch, start, length); if (str.trim().length() > 0) { System.out.println("characters:" + str); } } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { System.out.println("<"+qName+">"); } } }