欢迎来到天天文库
浏览记录
ID:50812555
大小:33.00 KB
页数:3页
时间:2020-03-14
《SAX解析xml原理以及说明.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SAX解析xml的原理以及说明1.所需jar包sax2r2-0.1.jar2.主要原理以及详细内容(1)主要原理除了准备、工厂和类加载、文件初始之外,主要的解析机制以下图案例说明如下:以某标签(例如)开始解析(方法startElement()),继而获取两个相邻标签(例如和)之间的内容(方法characters()),如果接下来的标签不是成对的另一个结束标签(例如),则继续执行开始解析标签的操作,直到解析到存在成对的另一个结束标签
2、时,则执行结束操作(方法endElement()),接下来将循环执行这些步骤,直到xml文件解析完毕。(2)实际解析详细内容展示(1)publicvoidparserXml(StringfileName){SAXParserFactorysaxfac=SAXParserFactory.newInstance();//获取工厂类try{Stringpath="C://dataMigration//"+fileName;SAXParsersaxparser=saxfac.newSAXParser()
3、;//初始化实例类saxparser.parse(newFile(path),newMySAXHandler());//调用解析方法(其中newMySAXHandler()为主要的处理逻辑)}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(FileNotFoundExceptione){e.printStackTrace();}cat
4、ch(IOExceptione){e.printStackTrace();}}主要业务逻辑处理类classMySAXHandlerextendsDefaultHandler{StringtagName@OverridepublicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{this.tagName=qName//qName为标签的名字(如上图的5、son>中的person)//Attributes主要用于描述标签中的属性以及取值(如)Stringid=attributes.getQName(0);//获取标签的第一个属性的名字(如果是图中的person标签,则id=“id”)StringidValue=attributes.getValue(0);//获取标签中第一个属性的定义的值(如果是图中的person标签,则id=“1”)intlength=attributes.getLength()6、;//这里获取到的是标签的所有属性的数量if(this.tagName.equalsIgnoreCase("person")){//定义到开始的标签是person的时候做一些处理}}@Overridepublicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{Stringdata=newString(ch,start,length);//以上方式会读取换行等作为””,所以不建议使用这种方式获取内容,建议创建Strin7、gBuffer实例,调用newStringBuffer().append(ch,start,length);并调用delete(0,currentValue.length())清理;//这里的data值是两个相邻标签之间的内容,也可以定义为其他可行的数据类型(如StringBuffer等),需要注意的是sax是流式解析,也就意味的所有的相邻标签之间的内容都会在这里获取,所以要做好判断处理if(tagName.equalsIgnoreCase("name")){//定义标签名字是name的时候,可8、以对获取到的数据进行处理}}@OverridepublicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{//每当出现标签的时候就会进入该方法(算是触发该方法的条件)if(qName=="person"{//定义出现标签的时候做的处理。}}
5、son>中的person)//Attributes主要用于描述标签中的属性以及取值(如)Stringid=attributes.getQName(0);//获取标签的第一个属性的名字(如果是图中的person标签,则id=“id”)StringidValue=attributes.getValue(0);//获取标签中第一个属性的定义的值(如果是图中的person标签,则id=“1”)intlength=attributes.getLength()
6、;//这里获取到的是标签的所有属性的数量if(this.tagName.equalsIgnoreCase("person")){//定义到开始的标签是person的时候做一些处理}}@Overridepublicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{Stringdata=newString(ch,start,length);//以上方式会读取换行等作为””,所以不建议使用这种方式获取内容,建议创建Strin
7、gBuffer实例,调用newStringBuffer().append(ch,start,length);并调用delete(0,currentValue.length())清理;//这里的data值是两个相邻标签之间的内容,也可以定义为其他可行的数据类型(如StringBuffer等),需要注意的是sax是流式解析,也就意味的所有的相邻标签之间的内容都会在这里获取,所以要做好判断处理if(tagName.equalsIgnoreCase("name")){//定义标签名字是name的时候,可
8、以对获取到的数据进行处理}}@OverridepublicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{//每当出现标签的时候就会进入该方法(算是触发该方法的条件)if(qName=="person"{//定义出现标签的时候做的处理。}}
此文档下载收益归作者所有