预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

SAX解析xml的原理以及说明所需jar包sax2r2-0.1.jar主要原理以及详细内容主要原理除了准备、工厂和类加载、文件初始之外,主要的解析机制以下图案例说明如下:以某标签(例如<persons>)开始解析(方法startElement()),继而获取两个相邻标签(例如<persons>和<person>)之间的内容(方法characters()),如果接下来的标签不是成对的另一个结束标签(例如</name>),则继续执行开始解析标签的操作,直到解析到存在成对的另一个结束标签时,则执行结束操作(方法endElement()),接下来将循环执行这些步骤,直到xml文件解析完毕。(2)实际解析详细内容展示(1)publicvoidparserXml(String){SAXParserFactorysaxfac=SAXParserFactory.newInstance();//获取工厂类try{Stringpath="C://dataMigration//"+;SAXParsersaxparser=saxfac.newSAXParser();//初始化实例类saxparser.parse(new),newMySAXHandler());//调用解析方法(其中newMySAXHandler()为主要的处理逻辑)}catch(ParserConfigurationExceptione){e.printStackTrace();}catch(SAXExceptione){e.printStackTrace();}catch(e){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}主要业务逻辑处理类classMySAXHandlerextendsDefaultHandler{StringtagName@OverridepublicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXException{this.tagName=qName//qName为标签的名字(如上图的<person>中的person)//Attributes主要用于描述标签中的属性以及取值(如<personid=“1”name=”009”>)Stringid=attributes.getQName(0);//获取标签的第一个属性的名字(如果是图中的person标签,则id=“id”)StringidValue=attributes.getValue(0);//获取标签中第一个属性的定义的值(如果是图中的person标签,则id=“1”)intlength=attributes.getLength();//这里获取到的是标签的所有属性的数量if(this.tagName.equalsIgnoreCase("person")){//定义到开始的标签是person的时候做一些处理}}@Overridepublicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{Stringdata=newString(ch,start,length);//以上方式会读取换行等作为”\n”,所以不建议使用这种方式获取内容,建议创建StringBuffer实例,调用newStringBuffer().append(ch,start,length);并调用delete(0,currentValue.length())清理;//这里的data值是两个相邻标签之间的内容,也可以定义为其他可行的数据类型(如StringBuffer等),需要注意的是sax是流式解析,也就意味的所有的相邻标签之间的内容都会在这里获取,所以要做好判断处理if(tagName.equalsIgnoreCase("name")){//定义标签名字是name的时候,可以对获取到的数据进行处理}}@OverridepublicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{//每当出现</..>标签的时候就会进入该方法(算是触发该方法的条件)if(qName=="person"{//定义出现</person>标签的时候做的处理。}}