SAX(Simple API for XML),是指一种接口,或者一个软件包。
SAX:事件驱动型的XML解析方式。顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问,且是只读的。
由于移动设备的内存资源有限,SAX的顺序读取方式更适合移动开发。
SAX解析xml文件,将解析出来的结果放到一个bean中,再将所有的baen放到list列表中
例子程序的xml文件为:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <书架>
- <书>
- <书名>海的女儿</书名>
- <作者>安徒生</作者>
- <售价>50.0元</售价>
- </书>
- <书>
- <书名>卖火柴的小女孩</书名>
- <作者>安徒生</作者>
- <售价>28.0元</售价>
- </书>
- </书架>
需要一个book类,存放书的具体信息(书名,作者,售价)为:
packagecom.flower.parsexml;
-
-
- publicclassBook{
- privateStringname;
- privateStringauthor;
- privateStringprice;
- publicStringgetName(){
- returnname;
- }
- voidsetName(Stringname){
- this.name=name;
- }
- publicStringgetAuthor(){
- returnauthor;
- voidsetAuthor(Stringauthor){
- this.author=author;
- publicStringgetPrice(){
- returnprice;
- voidsetPrice(Stringprice){
- this.price=price;
- }
下面开始解析,代码如下:
importjava.io.IOException;
- importjava.util.ArrayList;
- importjavax.xml.parsers.ParserConfigurationException;
- importjavax.xml.parsers.SAXParser;
- importjavax.xml.parsers.SAXParserFactory;
- importorg.xml.sax.Attributes;
- importorg.xml.sax.SAXException;
- importorg.xml.sax.XMLReader;
- importorg.xml.sax.helpers.DefaultHandler;
- classSAXparse{
- @SuppressWarnings("unchecked")
- staticvoidmain(String[]args)throwsParserConfigurationException,
- SAXException,IOException{
-
- SAXParserFactoryfactory=SAXParserFactory.newInstance();
- //创建解析器
- SAXParserparser=factory.newSAXParser();
- //得到读取器
- XMLReaderreader=parser.getXMLReader();
- //设置内容处理器
- BeanListHandlerhandler=newBeanListHandler();
- reader.setContentHandler(handler);
-
- reader.parse("src/books.xml");
- ArrayListlist=handler.getBooks();
- Bookbook;
- for(inti=0;i<list.size();i++){
- book=newBook();
- book=(Book)list.get(i);
- System.out.println(book.getName()+book.getAuthor()+book.getPrice());
- classBeanListHandlerextendsDefaultHandler{
- //将读取的内容存放到一个book对象中,存放到list集合中
- ArrayList<Book>list=newArrayList<Book>();
- privateStringcurrentTag;
- privateBookbook;
- @Override
- voidstartElement(Stringuri,StringlocalName,StringqName,
- Attributesattributes)throwsSAXException{
- currentTag=qName;
- if("书".equals(currentTag)){
- book=newBook();
- @Override
- voidcharacters(char[]ch,intstart,153); font-weight:bold; background-color:inherit">intlength)
- throwsSAXException{
- if("书名".equals(currentTag)){
- Stringname=newString(ch,start,length);
- book.setName(name);
- if("作者".equals(currentTag)){
- Stringauthor= book.setAuthor(author);
- if("售价".equals(currentTag)){
- Stringprice= book.setPrice(price);
- voidendElement(Stringuri,StringqName)
- if("书".equals(qName)){
- list.add(book);
- null;
- currentTag=publicArrayList<Book>getBooks(){
- returnlist;
- }
运行结果为:
海的女儿安徒生50.0元
- 卖火柴的小女孩安徒生28.0元
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|