/*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文件遍历一次(当然也可以中间截断遍历)。*/               package com.softeem.xml.util;import java.io.File;import java.util.HashMap;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import com.softeem.xml.dto.ClassDTO;import com.softeem.xml.dto.CollegeDTO;import com.softeem.xml.dto.StudentDTO;public class SAXParseXML {		public static void main(String[] args) throws Exception {		String path = "D:/stus.xml";				CollegeDTO college = saxParse(path);		System.out.println(college.getClasses().get("计科1班").getStus().get("20111114").getStuName());	}	public static CollegeDTO saxParse(String path){		CollegeDTO college = null;		try {			SAXReader reader = new SAXReader();			//解析目标文件			Document dom = reader.read(new File(path));			//获取根节点			Element root = dom.getRootElement();			//获取根节点属性//		Attribute attr = root.attribute("id");//		String attrValue = attr.getValue();//		String cid = root.attribute("id").getValue();			String cid = root.attributeValue("id");			String cname = root.attributeValue("name");						//获取根节点的子节点			List
 cses = root.elements("class"); Map
 classes = new HashMap
(); for (int i = 0; i < cses.size(); i++) { Element cse = cses.get(i); String className = cse.attributeValue("className"); String classNum = cse.attributeValue("classNum"); List
 stes = cse.elements("student"); Map
 stus = new HashMap
(); for (Element ste : stes) { String stuNum = ste.attributeValue("stuNum"); String stuName = ste.attributeValue("stuName"); String stuSex = ste.attributeValue("stuSex"); String stuAge = ste.attributeValue("stuAge"); StudentDTO stu = new StudentDTO(stuNum, stuName, stuSex, Integer.parseInt(stuAge)); stus.put(stuNum, stu); } ClassDTO cla = new ClassDTO(className, Integer.parseInt(classNum), stus); classes.put(className, cla); } college = new CollegeDTO(Integer.parseInt(cid), cname, classes); } catch (Exception e) { System.err.println("出现错误!"); } return college; }}