JAXP解析XML之SAX解析
程序员文章站
2022-05-28 07:59:28
...
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文件 |
开发上比较复杂,需要自己来制作事件处理器 | 易于理解,易于开发 |
对工作人员更灵活,可以用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+">");
}
}
}