使用SAX方式解析XML文件
来源:互联网 发布:华大基因与阿里云 编辑:程序博客网 时间:2024/05/01 00:07
SAX方式解析XML的步骤:
1、通过SAXParseFactory的静态newInstance()方法获取SAXParseFactory实例factory
2、SAXParseFactory实例的newSAXParse()方法返回SAXParser实例parser
3、创建一个类继承DefaultHandle,重写方法进行业务已处理,创建这个类的实例handle
新建一个XML文件demo.xml,代码如下:
<?xml version="1.0" encoding="UTF-8"?><bookstore> <book id="1"> <name>放学后</name> <author>lcb</author> <year>2010</year> <price>25</price> </book> <book id="2"> <name>你的孤独,虽败犹荣</name> <author>刘同</author> <year>2011</year> <price>30</price> </book></bookstore>
新建SAXHandler.java类并继承DefaultHandle,并重写startElement()、endElement()、startDocument()、endDocument()方法
package com.imooc.io;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXHandler extends DefaultHandler { /** * 解析XML的开始标签 */public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);//开始解析book元素if(qName.equals("book")){//已知book元素属性的名称,根据属性名获取属性值//String value = attributes.getValue("id");//System.out.println("book的属性值是:"+value);//获取book元素属性的长度int num = attributes.getLength();for(int i = 0; i<num; i++){System.out.println("book元素第"+(i+1)+"个属性名是:"+attributes.getQName(i));System.out.println("book元素第"+(i+1)+"个属性值是:"+attributes.getValue(i));}}//如果不是book标签和bookstore标签,进行输出节点名else if(!qName.equals("book") && !qName.equals("bookstore")){System.out.println("节点名是:"+qName);}}/** * 用于获取节点名对应的节点值 */@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);//使用String(byte[] bytes,int offset,int length)构造方法把字符数组传递进去String value = new String(ch, start, length);/** * 因为characters解析时会把多余空格一起解析,造成输出多余空格, * 用trim方法去除空格后,并且不等于空格后才进行输出 */if(!value.trim().equals("")){System.out.println(value);}}/** * 解析XML的结束标签 */public void endElement(String uri, String localName, String qName) throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);}/** * 用来标识解析xml文档的开始 */public void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();System.out.println("SAX开始解析XML");}/** * 用来标识解析xml文档的结束 */public void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();System.out.println("SAX解析XML完成");}}
package com.imooc.io;import java.io.IOException;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.SAXException;public class SAXtest {public static void main(String[] args){//通过SAXParseFactory的静态newInstance()方法获取SAXParseFactory实例factorySAXParserFactory factory = SAXParserFactory.newInstance();try {//SAXParseFactory实例的newSAXParse()方法返回SAXParser实例parserSAXParser parser = factory.newSAXParser();//创建SAXHandler的对象SAXHandler handler = new SAXHandler();parser.parse("demo.xml", handler);} catch (ParserConfigurationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SAXException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
运行结果为:
SAX开始解析XML
book元素第1个属性名是:id
book元素第1个属性值是:1
节点名是:name
放学后
节点名是:author
lcb
节点名是:year
2010
节点名是:price
25
book元素第1个属性名是:id
book元素第1个属性值是:2
节点名是:name
你的孤独,虽败犹荣
节点名是:author
刘同
节点名是:year
2011
节点名是:price
30
SAX解析XML完成
0 0
- 使用SAX方式解析XML文件
- SAX方式解析XML文件
- 使用SAX解析XML文件(SAX解析)
- 使用SAX方式解析XML
- xml文件--SAX方式解析xml文件
- Android中使用SAX方式解析XML文件
- Android中使用SAX方式解析XML文件
- Android中使用SAX方式解析XML文件
- Android中使用SAX方式解析XML文件
- Android中使用SAX方式解析XML文件
- 安卓解析XML文件系列1:使用SAX方式
- 使用SAX解析XML文件
- 使用sax解析xml文件
- 使用SAX解析XML文件
- 使用SAX解析XML文件
- 使用SAX解析XML文件
- 使用SAX解析XML文件
- 使用SAX解析XML文件
- 页面Loading js插件
- 让apache支持https的设置步骤
- PHP 保持中文编码 json_encode 函数
- 大规模分布式系统架构与设计实战
- 欢迎使用CSDN-markdown编辑器
- 使用SAX方式解析XML文件
- Android 百度地图 缩放级别 自适应
- windows 下安装redis
- django 1.8 官方文档翻译:2-1-1 模型语法
- 1007--反射实现 AOP 动态代理模式(Spring AOP 的实现 原理)
- eclipse 中直接打开class文件设置
- 不需要ViewInject,简化你的findViewById
- jQuery 实现侧边浮动导航菜单效果
- 安卓学习之路之Fragment和Activity之间的传值