A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 如梦初醒 中级黑马   /  2012-4-3 23:39  /  1245 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 如梦初醒 于 2012-4-4 10:37 编辑

听方立勋老师的视频sax解析案例(javabean封装xml文档数据这一课,看到方老师写了一个sax解析程序,于是自己用匿名内部类的方式也些了一个同样功能的程序,运行了一下,结果跟预期的一样。但是这里有个问题困惑着我,那就是怎么让外部类TestSax6得到匿名内部类new DefaultHandler(){}的list变量,我用了很多方法都不行,请网上的高手指点!!!
下面是源程序和xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<学生名册>
        <学生>
                <姓名>张三</姓名>
                <性别>男</性别>
                <年龄>20</年龄>
        </学生>
        <学生>
                <姓名>王五</姓名>
                <性别>男</性别>
                <年龄>21</年龄>
        </学生>
</学生名册>
package com.crowndint.sax;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TestSax6 {
   public static void main(String[] args){
         try {
                         new TestSax6();
                 } catch (Exception e) {e.printStackTrace();}
   }
   public TestSax6() throws Exception{
          SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
                SAXParser saxParser=saxParserFactory.newSAXParser();
                saxParser.parse("student.xml", new DefaultHandler(){
                        List<student> list=new ArrayList<student>();
                        String currentTag;
                        student s;
                        @Override
                        public void startElement(String uri, String localName,String qName, Attributes attributes) throws SAXException {
                                currentTag=qName;
                                if("学生".equals(currentTag)){
                                         s=new student();
                                }
                        }
                        @Override
                        public void characters(char[] ch, int start, int length){
                                if("姓名".equals(currentTag)){
                                        s.setName(new String(ch,start,length));
                                }
                                if("性别".equals(currentTag)){
                                        s.setMale(new String(ch,start,length));
                                }
                                if("年龄".equals(currentTag)){
                                        s.setAge(Integer.parseInt(new String(ch,start,length)));
                                }
                        }
                        @Override
                        public void endElement(String uri, String localName, String qName) throws SAXException {
                                if("学生".equals(qName)){
                                        list.add(s);
                                        //s=null;
                                }
                                currentTag=null;
                        }
                        @Override
                        public void endDocument() throws SAXException {
                                for(student s : list){
                                        System.out.format("姓名:%s ,性别:%s ,年龄:%d\n", s.getName(),s.getMale(),s.getAge());
                                }
                        }
                });
   }
}
运行结果如下:
姓名:张三 ,性别:男 ,年龄:20
姓名:王五 ,性别:男 ,年龄:21

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马