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文件被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 与 JSON 优劣对比
- As3.0 xml + Loader应用代码
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- C#针对xml基本操作及保存配置文件应用实例
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- 关于SQLServer2005的学习笔记 XML的处理
- C#通过DataSet读写xml文件的方法
- C#实现基于XML配置MenuStrip菜单的方法
- php xml 入门学习资料
- Zend 输出产生XML解析错误
- PHP遍历XML文档所有节点的方法
- PHP实现XML与数据格式进行转换类实例