加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SAX解析XML文件

发布时间:2020-12-16 00:24:04 所属栏目:百科 来源:网络整理
导读:/*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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读