SAX解析文件

 1 import javax.xml.parsers.ParserConfigurationException;
 2 import javax.xml.parsers.SAXParser;
 3 import javax.xml.parsers.SAXParserFactory;
 4 /**
 5  * 1.新建一个SAX解析工厂实例
 6  * 2.new一个解析器
 7  * 3.new一个解析处理器
 8  * 4.解析文件
 9  * 5.获取信息
10  * @author Administrator
11  *
12  */
13 public class SAXParserDemo {
14
15     public static void main(String[] args) {
16         SAXParserFactory factory = SAXParserFactory.newInstance();// 工厂模式,单例模式
17         try {
18             /* 获得一个sax解析器 */
19             SAXParser parser = factory.newSAXParser();
20             /* 解析器解析这个文件,new一个解析处理器 */
21             SAXParserHandler sax = new SAXParserHandler();
22             parser.parse("books.xml", sax);
23             System.out.println("几本书:" + sax.booklist.size());
24
25             for (Book book : sax.booklist) {
26                 System.out.println(book.getId());
27                 System.out.println(book.getName());
28                 System.out.println(book.getPrice());
29                 System.out.println(book.getAuthor());
30
31             }
32
33         } catch (ParserConfigurationException e) {
34
35             e.printStackTrace();
36         } catch (Exception e) {
37
38             e.printStackTrace();
39         }
40
41     }
42
43 }

  1 package SAXParser1;
  2
  3 import java.util.ArrayList;
  4
  5 import org.xml.sax.Attributes;
  6 import org.xml.sax.SAXException;
  7 import org.xml.sax.helpers.DefaultHandler;
  8
  9 /**
 10  * @author xuhua 解析处理器
 11  * 1.重写方法
 12  */
 13 public class SAXParserHandler extends DefaultHandler {
 14     /* 全局变量 */
 15     Book book;
 16     String value;
 17     ArrayList<Book> booklist = new ArrayList<Book>();
 18
 19     /**
 20      * 解析开始
 21      */
 22     @Override
 23     public void startDocument() throws SAXException {
 24         super.startDocument();
 25         System.out.println("parse start");
 26     }
 27
 28     /**
 29      * 解析结束
 30      */
 31     @Override
 32     public void endDocument() throws SAXException {
 33         super.endDocument();
 34         System.out.println("parse end");
 35     }
 36
 37     /**
 38      * 开始解析标签
 39      * qName:标签名字  Attributes:属性
 40      */
 41     @Override
 42     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
 43
 44         super.startElement(uri, localName, qName, attributes);
 45
 46         if (qName.equals("book")) {
 47             book = new Book();
 48             String id = attributes.getValue("id");//获取id属性值
 49             System.out.println(id);
 50
 51             /* 获取属性名与属性值 */
 52             int num = attributes.getLength(); // 属性个数
 53             for (int i = 0; i < num; i++) {
 54                 System.out.println("属性名:" + attributes.getQName(i));
 55                 System.out.println("属性值:" + attributes.getValue(i));
 56                 /* 把id属性值set进book实体中 */
 57                 if (attributes.getQName(i).equals("id")) {
 58                     book.setId(attributes.getValue(i));
 59                 }
 60             }
 61         }
 62
 63         System.out.println("属性名:" + qName);
 64     }
 65
 66     /**
 67      * 结束标签解析
 68      */
 69     @Override
 70     public void endElement(String uri, String localName, String qName) throws SAXException {
 71
 72         super.endElement(uri, localName, qName);
 73         if (qName.equals("book")) {
 74             booklist.add(book);
 75             book = null;
 76             System.out.println("==============结束遍历某一本书的内容=============");
 77         }
 78         /* id为book节点的属性,其他为节点值 */
 79         // else if(qName.equals("id"))
 80         // {
 81         // book.setId(value);
 82         // }
 83         else if (qName.equals("name")) {
 84             book.setName(value);
 85         } else if (qName.equals("price")) {
 86             book.setPrice(value);
 87         } else if (qName.equals("author")) {
 88             book.setAuthor(value);
 89         }
 90         System.out.println(qName + "元素结束");
 91
 92     }
 93
 94     /**
 95      * 获取节点值
 96      */
 97     @Override
 98     public void characters(char[] ch, int start, int length) throws SAXException {
 99
100         super.characters(ch, start, length);
101         /**/
102         value = new String(ch, start, length);
103         // if(value.trim()!=null)
104         if (!value.trim().equals("")) // 标签之间存在空格
105             System.out.println(value);
106     }
107
108 }

解析处理器

 1 package SAXParser1;
 2
 3 public class Book {
 4     private String id;
 5     private String name;
 6     private String price;
 7     private String author;
 8     public String getId() {
 9         return id;
10     }
11     public void setId(String id) {
12         this.id = id;
13     }
14     public String getName() {
15         return name;
16     }
17     public void setName(String name) {
18         this.name = name;
19     }
20     public String getPrice() {
21         return price;
22     }
23     public void setPrice(String price) {
24         this.price = price;
25     }
26     public String getAuthor() {
27         return author;
28     }
29     public void setAuthor(String author) {
30         this.author = author;
31     }
32
33 }

book实体javabean

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <bookstore>
 3     <book id="1">
 4         <name>java入门</name>
 5         <price>80</price>
 6         <author>张思</author>
 7     </book>
 8     <book id="2">
 9         <name>java进阶</name>
10         <price>90</price>
11         <author>叶东</author>
12     </book>
13
14 </bookstore>

xml文件

时间: 2024-11-06 11:37:21

SAX解析文件的相关文章

SAX解析XML文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有 优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org

XML文件解析DOM解析和SAX解析

解析一个XML文档有哪些内容解析有:dom和sax两种dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会触发一个事件,适合对XML的顺序访问,占用内存资源稍小 Node: XML 文档的 documentElement 属性是根节点. nodeName 属性是节点的名称.nodeName 是只读的 元素节点的 nodeName 与标签名相同 属性节点的 nodeName 是属性的名称 文本节点的 no

JAVA SAX解析XML文件

[代码] [Java]代码view sourceprint?001package SAXparse;002 003 004import java.io.FileInputStream;005import java.lang.reflect.Array;006import java.lang.reflect.InvocationTargetException;007import java.lang.reflect.Method;008import java.text.ParseException;

XML文件解析【安卓7】——SAX解析

XML文件解析 XML解析:XML技术是Android平台的应用基础,  Android提供了多种解析XML的方式:SAX解析.DOM解析.PULL解析 SAX解析 SAX --Simple  API  forXML  (XML简单的API) --解析速度快.占用内存少 --提供一组简单的API用于解析XML文件 --SAX在解析XML文件前,先指定一个解析事件处理器(Handler),SAX会对XML文档进行简单的顺序扫描,当扫描到[文档(Document)的开始和结束.元素(Element)

SAX解析XML文件实例代码

import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.s

Python—使用xml.sax解析xml文件

什么是sax? SAX是一种基于事件驱动的API. 利用SAX解析XML文档牵涉到两个部分:解析器和事件处理器. 解析器负责读取XML文档,并向事件处理器发送事件,如元素开始跟元素结束事件; 而事件处理器则负责对事件作出相应,对传递的XML数据进行处理. sax适于处理下面的问题: 1.对大型文件进行处理: 2.只需要文件的部分内容,或者只需从文件中得到特定信息: 3.想建立自己的对象模型的时候. 在python中使用sax方式处理xml要先引入xml.sax中的parse函数,还有xml.sa

cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会无意间看到cocos微信上的一个实话实说活动.反正就是參加了能够抽奖这样子啦.没错.我就是本着那官方T恤去的,本着分子越大分母越大抽奖几率越大的原则,然后就连着发了一番感慨.并且还都是比較罗嗦,没想到隔天cocos君居然给我回复了,中奖了有木有,cocos2dx的官方T恤,哈哈. .然后就是曾经的大

XML文件解析之SAX解析

使用DOM解析的时候是需要把文档的所有内容读入内存然后建立一个DOM树结构,然后通过DOM提供的接口来实现XML文件的解析,如果文件比较小的时候肯定是很方便的.但是如果是XML文件很大的话,那么这种方式的解析效率肯定会大打折扣的,所以SAX解析就很有必要的了.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理.在读入文档的过程中便实现了解析过程,现在就简单介绍下SAX解析的具体实现过程. 1.主要对象 SAXParserFactory:解析工厂

安卓SAX解析XML文件

XML文件常用的解析方式有DOM解析,SAX解析. 一.Sax SAX(simpleAPIforXML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂.SAX解析XML文档采用事件驱动模式.什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理.基于事件驱动的处理模式主要是基于事件源和事件