jaxp的Sax解析
2016-01-20 00:02
375 查看
在使用DOM解析XML时候,需要读取整个XML文档,在内存架构代表整个DOM树的Document对象,从而再对XML文档操作,如果XML文件特别大,就特别消耗内存。SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。
解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
事件处理器由程序员自定义,继承自DefaultHandler。
举个例子
使用sax解析下面的xml文件---cd.xml。打印出里面所有属于UK的专辑作者
解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
事件处理器由程序员自定义,继承自DefaultHandler。
举个例子
使用sax解析下面的xml文件---cd.xml。打印出里面所有属于UK的专辑作者
<?xml version="1.0" encoding="UTF-8"?> <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD> <CD> <TITLE>Greatest Hits</TITLE> <ARTIST>Dolly Parton</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>RCA</COMPANY> <PRICE>9.90</PRICE> <YEAR>1982</YEAR> </CD> <CD> <TITLE>Still got the blues</TITLE> <ARTIST>Gary Moore</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Virgin records</COMPANY> <PRICE>10.20</PRICE> <YEAR>1990</YEAR> </CD> <CD> <TITLE>Eros</TITLE> <ARTIST>Eros Ramazzotti</ARTIST> <COUNTRY>EU</COUNTRY> <COMPANY>BMG</COMPANY> <PRICE>9.90</PRICE> <YEAR>1997</YEAR> </CD> <CD> <TITLE>One night only</TITLE> <ARTIST>Bee Gees</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>Polydor</COMPANY> <PRICE>10.90</PRICE> <YEAR>1998</YEAR> </CD> </CATALOG>
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 SaxParse { public static void main(String[] args) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { SAXParser saxParser = saxParserFactory.newSAXParser(); MyHandler myHandler=new MyHandler(); saxParser.parse("cd.xml", myHandler); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class MyHandler extends DefaultHandler{//继承DefaultHandler,然后重写父类方法 //两个类成员,用于在方法之间保存数据 boolean flag=false; String artist; @Override public void startDocument() throws SAXException { //System.out.println("MyHandler.startDocument()====>开始解析文档"); } @Override public void endDocument() throws SAXException { //System.out.println("MyHandler.endDocument()====>结束解析文档"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //System.out.println("MyHandler.startElement()====>开始解析元素"); //解析到了<ARTIST>这一元素,传递一个信号给characters()方法,将每个作者都保存到artist if (qName.equals("ARTIST")) { flag=true; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { //System.out.println("MyHandler.endElement()====>结束解析元素"); } @Override public void characters(char[] ch, int start, int length) throws SAXException { //System.out.println("MyHandler.characters()====>得到元素的文本"); //解析到了<ARTIST>这一元素,将每个作者都保存到artist if (flag) { artist=new String(ch, start, length); flag=false; } //如果<COUNTRY>元素的文本是UK,就输出作者名字 String uk=new String(ch, start, length); if (uk.equals("UK")) { System.out.println("The artist from UK----->"+artist); } } }
相关文章推荐
- Golang-import-introduce
- WinCE6.0学习笔记之三——快速编译驱动及BSP
- 环形缓冲区
- java web项目中只编译java文件,不编译application.xml
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- Zbrush如何位移、缩放和旋转
- 在蜂窝教育Android培训 努力成为IT人才
- java视频教程之数据库连接池配置的两种方法
- joomla 第一单元第六节分享K2到社交网络
- joomla第一单元第七节修改时间格式及组件模板定制
- 【JS--基础--语句】--for in 循环遍历语句
- iOS 7 navigation bar custom back button without title ===自定义导航栏返回按钮
- 初学unity(简单场景制作)
- python中的注释
- select 选中提交
- 秒学Swift语言
- 加油卡充值接口
- 湖北随州市推进教育信息化工作
- 我决定谈一谈世界上最著名的虫子:BUG !
- 宏正ATEN推出ALTUSEN全系列IP-Based远程机房管理方案