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();        }



 

原创粉丝点击