XML解析之SAX解析
来源:互联网 发布:阿里云服务器托管 编辑:程序博客网 时间:2024/05/22 08:07
概念: SAX(simple API for XML)是一种XML解析的替代方法。 而且相比于DOM,SAX可以在解析文档的任意时刻停止解析, 但任何事物都有其相反的一面,对于SAX来说就是操作复杂。它也是事件驱动的
思想 :
- 和pull解析一样,要有一个工厂
- 用sax工厂方法,得到sax解析器
- 设置文件来源,和handler
- 使用代理的handler,进行解析
- 重写handler的方法
- 重点看代码
写了一天的代码,不想说话,看代码
static List<Play> list = null; //储存所有的play对象 static Play p = null; private static void xmlSaxParserDemo() { try { SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(new FileInputStream("E:\\CodeDemo\\HttpUrlConnection\\paly.xml"),new MyHandler()); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } static class MyHandler extends DefaultHandler { int type = -1; //用于开始节点的标识 @Override public void startDocument() throws SAXException { System.out.println("startDocument"); //用于初始化数据,如果没必要就不需要重写 只是执行一次 } @Override public void endDocument() throws SAXException { //文档结束时调用, 只是执行一次,可以不重写 System.out.println("endDocument"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //开始元素,是重点, 在这里进行分析 //qName就是我们的数据 switch (qName) { case "PlayList": list = new ArrayList<>(); break; case "media": p = new Play(); for (int i = 0; i < attributes.getLength(); i++) { p.setDay(Integer.parseInt(attributes.getValue("day"))); p.setId(Integer.parseInt(attributes.getValue("id"))); } break; case "type": type = 0; break; case "name": type = 1; break; case "path": type = 2; // 0,1,2用于下面方法 进行获取数据时,判断 break; default: break; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // System.out.println("endElement: " + "uri = " + uri + " localName = " + localName + " qName = " + qName); //这是只对media 处理 if (qName.equals("media")) { list.add(p); } } @Override public void characters(char[] ch, int start, int length) throws SAXException { // System.out.println("content: " + new String(ch,start,length)); String content = new String(ch,start,length); switch (type) { case 0: p.setType(Integer.parseInt(content)); break; case 1: p.setName(content); break; case 2: p.setPath(content); break; } type = -1; //一定要记得置位 ! } }}
0 0
- 解析xml之--SAX
- 解析xml之--SAX
- 解析xml之--SAX
- XML解析之SAX
- XML 解析之SAX
- XML解析之SAX
- 【xml之SAX解析】
- XML解析之SAX
- 解析XML之SAX
- xml之SAX解析
- xml之sax解析
- xml解析之sax
- XML解析之SAX
- xml解析之SAX
- XML之sax解析
- XML解析之SAX
- xml之SAX解析
- Xml之Sax解析
- POJ2135 Farm Tour 最小费用流
- 【Web容器】Tomcat源码分析(5)-请求原理分析(上)
- Linux-(C)IO多路复用之epoll学习(转载)
- 输入某年某月某日,判断这一天是这一年的第几天?
- Laravel安装记录
- XML解析之SAX解析
- 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
- nodejs使用request发送http请求
- javascript编程之OOP
- android 绘图之Paint详解
- 【Web容器】Tomcat源码分析(6)-请求原理分析(中)
- 对引用参数&的理解
- C++ hdoj 2011 多项式求和
- 蓝牙之三-StateMachine