SAX解析XML文件
发布时间:2020-12-16 05:51:53 所属栏目:百科 来源:网络整理
导读:/*SAX与DOM解析XML的区别:解析xml有四种方法:DOM,SAX,DOM4j,JDOM.我们主要学了两种:DOM和SAX.DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件。各有各的好。DOM和SAX的不同:1.DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内
/* SAX与DOM解析XML的区别: 解析xml有四种方法:DOM,SAX,DOM4j,JDOM. 我们主要学了两种:DOM和SAX. DOM适于解析比较简单的XML而SAX则适于解析较复杂的XML文件。各有各的好。 DOM和SAX的不同: 1.DOM是基于内存的,不管文件有多大,都会将所有的内容预先装载到内存中。 从而消耗很大的内存空间。而SAX是基于事件的。当某个事件被触发时,才获取 相应的XML的部分数据,从而不管XML文件有多大,都只占用了少量的内存空间。 2.DOM可以读取XML也可以向XML文件中插入数据,而SAX却只能对XML进行读取, 而不能在文件中插入数据。这也是SAX的一个缺点。 3.SAX的另一个缺点:DOM我们可以指定要访问的元素进行随机访问,而SAX则不行。 SAX是从文档开始执行遍历的。并且只能遍历一次。也就是说我们不能随机的访问XML 文件,只能从头到尾的将XML文件遍历一次(当然也可以中间截断遍历)。 */ packagecom.softeem.xml.util; importjava.io.File; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importorg.dom4j.Document; importorg.dom4j.Element; importorg.dom4j.io.SAXReader; importcom.softeem.xml.dto.ClassDTO; importcom.softeem.xml.dto.CollegeDTO; importcom.softeem.xml.dto.StudentDTO; publicclassSAXParseXML{ publicstaticvoidmain(String[]args)throwsException{ Stringpath="D:/stus.xml"; CollegeDTOcollege=saxParse(path); System.out.println(college.getClasses().get("计科1班").getStus().get("20222224").getStuName()); } publicstaticCollegeDTOsaxParse(Stringpath){ CollegeDTOcollege=null; try{ SAXReaderreader=newSAXReader(); //解析目标文件 Documentdom=reader.read(newFile(path)); //获取根节点 Elementroot=dom.getRootElement(); //获取根节点属性 // Attributeattr=root.attribute("id"); // StringattrValue=attr.getValue(); // Stringcid=root.attribute("id").getValue(); Stringcid=root.attributeValue("id"); Stringcname=root.attributeValue("name"); //获取根节点的子节点 List<Element>cses=root.elements("class"); Map<String,ClassDTO>classes=newHashMap<String,ClassDTO>(); for(inti=0;i<cses.size();i++){ Elementcse=cses.get(i); StringclassName=cse.attributeValue("className"); StringclassNum=cse.attributeValue("classNum"); List<Element>stes=cse.elements("student"); Map<String,StudentDTO>stus=newHashMap<String,StudentDTO>(); for(Elementste:stes){ StringstuNum=ste.attributeValue("stuNum"); StringstuName=ste.attributeValue("stuName"); StringstuSex=ste.attributeValue("stuSex"); StringstuAge=ste.attributeValue("stuAge"); StudentDTOstu=newStudentDTO(stuNum,stuName,stuSex,Integer.parseInt(stuAge)); stus.put(stuNum,stu); } ClassDTOcla=newClassDTO(className,Integer.parseInt(classNum),stus); classes.put(className,cla); } college=newCollegeDTO(Integer.parseInt(cid),cname,classes); }catch(Exceptione){ System.err.println("出现错误!"); } returncollege; } } <!--stus.xml文件--> <?xmlversion="1.0"encoding="UTF-8"?> <collegeid="1001"name=""> <classclassName="计科1班"classNum="41"> <studentstuNum="20222221"stuName=""stuSex="男"stuAge="20"/> <studentstuNum="20222222"stuName=""stuSex="男"stuAge="21"/> <studentstuNum="20222223"stuName=""stuSex="女"stuAge="20"/> <studentstuNum="20222224"stuName=""stuSex="男"stuAge="19"/> </class> <classclassName="网工1班"classNum="49"> <studentstuNum="20112111"stuName=""stuSex="男"stuAge="21"/> <studentstuNum="20112112"stuName=""stuSex="男"stuAge="20"/> <studentstuNum="20112113"stuName=""stuSex="女"stuAge="22"/> </class> </college> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |