SAX方式解析XML文档
一、SAX (Simple API for XML)
SAX解析方式是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
优点: 无需将整个文档加载到内存中, 所以内存消耗少的 ,适合解析特别大的 XML文件。
二、步骤
创建解析工厂:通过 SAXParaserFactory.newInstance()方法获取
创建解析器:通过newSAXParser()获取
执行 parser 方法,传入两个参数:XML文件路径、事件处理器
创建一个类,继承 DefaultHander 类 ,重写三个方法 :
startElement(String uri, String localName, String qName, Attributes attributes):获取开始标签
qName :把 开始 标签名称返回
attributes :返回标签中的属性对象
characters(char[] ch, int start, int length):获取标签文本内容
endElement(String uri, String localName, String qName):获取结束标签
三、实现代码
1、XML文档
<?xml version="1.0" encoding="UTF-8"?> <!-- 第一句为固定的声明语句 -->
<person> <!--开始标签,可任意定义,但要有对应的结束标签--><!-- person也是根节点 -->
<p1> <!-- person的一个子节点 -->
<name address="beijing">zhangsan</name>
<age>20</age>
</p1>
<p1>
<name>wangwu</name>
<age>29</age>
</p1>
</person> <!--结束标签,与开始标签对应-->
2、SAX方式解析XML文档的Java代码
package com.hdl.Saxparser;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MySAXParserTest {
public static void main(String[] args) {
try {
// 1、创建SAX解析器工厂
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// 2、创建SAX解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
// 3、执行parser方法
saxParser.parse("conf/persons.xml", new MyHandler());
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class MyHandler extends DefaultHandler{
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.print("<" + qName + ">");
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
System.out.print(new String(ch, start, length));
}
/* (non-Javadoc)
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
System.out.print("<" + qName + ">");
}
}
3、解析结果
上一篇: JS求代码_html/css_WEB-ITnose
下一篇: php巧用304代码缓存图片文件