您的位置:首页 > 其它

XML解析之SAX解析

2015-09-04 19:20 399 查看
使用DocumentHelper:

xml文件被Sax解析器载入,由于Sax解析是按照xml文件的顺序来解析,

当读入<?xml version="1.0" encoding="UTF-8"?> 时,会调用startDocument()方法,

当读入<students>的时候,由于它是个ElementNode,所以会调用 startElement(String uri, String localName, String qName, Attributes attributes) 方法,

其中第二个参数就是节点的名称,

注意:由于有些环境不一样,有时候第二个参数有可能为空,所以可以使用第三个参数,因此在解析前,先调用一下看哪个参数能用, 第四个参数是这个节点的属性。

这里我们不需要这个节点,所以从<student>这个节点开始,当读入时,调用startElement(....)方法,

由于只有一个属性id,可以通过attributes.getValue(0)来得到,然后会调用characters(char[] ch, int start, int length)方法,

不要以为那里是空白,Sax解析器可不那么认为,Sax解析器会把它认为是一个TextNode。但是这个空白不是我们想要的数据,我们是想要<name>节点下的文本信息。

这就要定义一个记录当上一节点的名称的tagName,在characters(char[] ch, int start, int length)方法中,判断当前节点是不是name,是再取值,才能取到张三。

//构建SAXParser

parser = SAXParserFactory.newInstance().newSAXParser();

//实例化 DefaultHandler对象

SaxParseXml parseXml=new SaxParseXml();

//加载资源文件 转化为一个输入流

InputStream stream=SaxParseXml.class.getClassLoader().getResourceAsStream("student.xml");

//调用parse()方法

parser.parse(stream, parseXml);

//遍历结果

List<Student> list=parseXml.getList();

for(Student student:list){

System.out.println("id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName()+"\tage:"+student.getAge());

}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

student.xml

运行结果:

id:1 group:1
name:张三 age:18

id:2 group:2
name:张三2 age:19
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml解析 xml