本篇文章主要介绍了"java拾遗2----XML解析二 SAX解析",主要涉及到方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
XML解析之SAX解析:SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFacto...
XML解析之SAX解析:
SAX解析器:SAXParser类同DOM一样也在javax.xml.parsers包下,此类的实例可以从 SAXParserFactory.newSAXParser() 方法获得。
注意SAXParser的parse()方法:
parse(String uri, DefaultHandler dh),parse(File f, DefaultHandler dh)等都需要传递一个DefaultHandler的对象。
查看API帮助手册可知,SAX解析是事件驱动的,DefaultHandler是SAX2 事件处理程序的默认基类,在 org.xml.sax.helpers 软件包中,由它来实现相关事件的回调,并提供所有回调方法默认的空实现。
DefaultHandler的常用回调方法:
void startDocument():接收文档开始的通知。
void startElement(String uri, String localName, String qName, Attributes attributes): 接收元素开始的通知。
void characters(char[] ch, int start, int length): 接收元素中字符数据的通知。
void endElement(String uri, String localName, String qName):接收元素结束的通知。
void endDocument(): 接收文档结束的通知。
为什么说SAX是推模式解析?
SAX 解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,由解析器自动调用相应事件方法,而不是由我们自己去调用。
使用SAX解析XML,观察各种事件回调:
有如下要解析的xml文件:
1xml version="1.0" encoding="UTF-8" standal>?> 2 3<students> 4 5<student id="003"> 6 7<name>xiaoqiaoname> 8 9student>1011students>
解析代码:
1publicclass SaxXmlParser {
2 3publicstaticvoid main(String[] args) {
4 5 SAXParserFactory factory = SAXParserFactory.newInstance();
6 7try {
8 9 SAXParser parser = factory.newSAXParser();
1011 parser.parse("students_bak.xml", new DefaultHandler(){
1213 @Override
1415publicvoid characters(char[] ch, int start, int length)
1617throws SAXException {
1819 System.out.println("read characters:"+new String(ch,start,length));
2021 }
2223 @Override
2425publicvoid endDocument() throws SAXException {
2627 System.out.println("end document...");
2829 }
3031 @Override
3233publicvoid endElement(String uri, String localName, String qName)
3435throws SAXException {
3637 System.out.println("end element:<"+qName+">");
3839 }
4041 @Override
4243publicvoid startDocument() throws SAXException {
4445 System.out.println("start document...");
4647 }
4849 @Override
5051publicvoid startElement(String uri, String localName, String qName, Attributes attributes)
5253throws SAXException {
5455 System.out.println("start element:<"+qName+">");
5657if(qName.equals("student")){
5859 System.out.println("id="+attributes.getValue("id"));
6061 }
6263 }
6465 });
6667 } catch (Exception e) {
6869 e.printStackTrace();
7071 }
7273 }
7475 }
上面代码在parse()方法中,第二个参数定义了一个继承自DefaultHandler的匿名内部类对象,重写了5个主要的事件回调方法,用以观察事件的触发过程。
在startElement()方法中qName存放的是节点名,attributes存放的是该节点的属性,endElement()方法同样。
运行结果:
start document...
start element:
read characters:
start element:
id=003
read characters:
start element:
read characters:xiaoqiao
end element:
read characters:
end element:
read characters:
end element:
end document...
首先回调的是startDocument()方法;
然后碰到节点,回调startElement()方法;
后面有回车,所以会触发characters()方法,输出当前读到的字符;
然后碰到节点,回调startElement()方法,输出id属性值;
后面也有回车,所以会触发characters()方法,输出当前读到的字符;
然后碰到了节点,回调startElement()方法;
后面是xiaoqiao,回调characters()方法;
然后到,回调endElement()方法;
碰到回车,回调characters()方法;
到,回调endElement()方法;
碰到回车,回调characters()方法;
到,回调endElement()方法;
文档结束,回调endDocument()方法,解析工作结束。
如果有需要对文档进行别的处理操作,如查找某个节点等,可以重写响应的事件回调方法,添加上需要的逻辑的实现代码即可。
以上就介绍了java拾遗2----XML解析二 SAX解析,包括了方面的内容,希望对Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_147952.html