SAX解析xml
来源:互联网 发布:nba2kol贾森汤普森数据 编辑:程序博客网 时间:2024/04/30 08:49
1.什么是SAX?
SAX,全程Simple API for XML,既是一种接口,也是指一个软件包,作为接口,SAX是事件驱动型XML解析的一个标准接口
2.SAX基本原理
SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始于结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束
大多数SAX实现都会产生以下类型的事件:
a.在文档的开始和结束时触发文档处理事件.
b.在文档内每一XML元素接受解析的前后触发元素的事件
c.任何元数据通常都由单独的事件交付
d.在处理文档的DTD或Schema时产生DTD或Schema事件
e.产生的错误事件用来通知主机应用程序解析错误
3.SAX常用接口
4.SAX解析
5.SAX解析xml操作
xml文件的内容如下
<?xml version="1.0" encoding="UTF-8"?><string xmlns="http://tempuri.org/"> <ArrayOfHolidayType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="HolidayType"> <HolidayType> <ID>1</ID> <Title>事假</Title> </HolidayType> <HolidayType> <ID>2</ID> <Title>婚假</Title> </HolidayType> <HolidayType> <ID>3</ID> <Title>年假</Title> </HolidayType> <HolidayType> <ID>4</ID> <Title>病假</Title> </HolidayType> <HolidayType> <ID>5</ID> <Title>休假</Title> </HolidayType> </ArrayOfHolidayType></string>
2.声明一个myContentHandler的匿名内部类
private class myContentHandler extends DefaultHandler { private String tagName; //保存当前解析的元素 private HolidayType holidayTypeObj; //每次开始解析一个元素时,实例化HolidayType对象 private ArrayList<HolidayType> HolidayTypeList=new ArrayList<HolidayType>(); //将解析xml后的对象添加到集合中@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {String textContent=new String(ch,start,length);//条件必须这样写呀 否则会出错呀(字符串转换为整形时出错呀)if(tagName.equals("ID")&&textContent!=null&&!textContent.trim().equals("")){holidayTypeObj.setID(Integer.parseInt(textContent));}else if(tagName.equals("Title")&&textContent!=null&&!textContent.trim().equals("")){holidayTypeObj.setTitle(textContent);}}@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stub if(localName.equals("HolidayType")) { HolidayTypeList.add(holidayTypeObj); }}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();}@Overridepublic void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {// TODO Auto-generated method stubtagName=localName;if(localName.equals("HolidayType")){holidayTypeObj=new HolidayType();}} }
3.使用上面的myContentHandler类解析xml
try { //创建一个SAXParserFactory SAXParserFactory factory=SAXParserFactory.newInstance(); XMLReader reader=factory.newSAXParser().getXMLReader(); //为XMLReader设置内容处理器 reader.setContentHandler(new myContentHandler()); //开始解析文件 reader.parse(new InputSource(new StringReader(xml))); for(HolidayType obj:HolidayTypeList) { holidayTypes.add(obj.getTitle()); } } catch(Exception e) { e.printStackTrace(); }
- [XML] SAX解析XML
- 【XML】SAX解析XML
- XML解析(SAX解析)
- XML解析:SAX解析
- Study SAX《SAX解析XML》
- 使用SAX解析XML
- 解析xml之--SAX
- SAX解析XML
- SAX解析XML
- xml文件解析-SAX
- 解析xml之--SAX
- 解析xml之--SAX
- 使用SAX解析XML
- XML学习《SAX解析》
- SAX解析XML例子
- java sax 解析 xml
- 使用SAX解析XML
- sax解析xml实例
- 让人无语的java.net.ConnectException: Connection timed out: connect
- 如何做RCP里的图片资源管理
- Oracle 11g存在密码过期问题
- C++SDL---基础2
- rails的erb模板文件内嵌js脚本的压缩
- SAX解析xml
- 海量数据处理面试题
- Marble介绍
- Silverlight 行为之一 ---TriggerAction
- Google+改版界面 新增空白栏引发猜想
- 【Visual C++】vs2008/2005正确打开vs2010所创建项目的几种方法
- oracle11g学习笔记(八)
- paramiko的安装与使用
- ASP.NET发送邮件