SAX解析XML文件
程序员文章站
2022-03-03 15:06:12
...
/*
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<Element> cses = root.elements("class");
Map<String, ClassDTO> classes = new HashMap<String, ClassDTO>();
for (int i = 0; i < cses.size(); i++) {
Element cse = cses.get(i);
String className = cse.attributeValue("className");
String classNum = cse.attributeValue("classNum");
List<Element> stes = cse.elements("student");
Map<String, StudentDTO> stus = new HashMap<String, StudentDTO>();
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;
}
}
<!--stus.xml文件--> <?xml version="1.0" encoding="UTF-8"?> <college id="1001" name=""> <class className="计科1班" classNum="41"> <student stuNum="20111111" stuName="" stuSex="男" stuAge="20" /> <student stuNum="20111112" stuName="" stuSex="男" stuAge="21" /> <student stuNum="20111113" stuName="" stuSex="女" stuAge="20" /> <student stuNum="20111114" stuName="" stuSex="男" stuAge="19" /> </class> <class className="网工1班" classNum="49"> <student stuNum="20112111" stuName="" stuSex="男" stuAge="21" /> <student stuNum="20112112" stuName="" stuSex="男" stuAge="20" /> <student stuNum="20112113" stuName="" stuSex="女" stuAge="22" /> </class> </college>
转载于:https://blog.51cto.com/974124461/1546148
上一篇: SAX解析XML文件
下一篇: Sax解析xml文件