新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论DOM, SAX, XPath等。
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DOM/SAX/XPath 』 → sax新手,一个简单的问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 16696 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: sax新手,一个简单的问题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     0messiah 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:59
      门派:XML.ORG.CN
      注册:2006/5/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给0messiah发送一个短消息 把0messiah加入好友 查看0messiah的个人资料 搜索0messiah在『 DOM/SAX/XPath 』的所有贴子 引用回复这个贴子 回复这个贴子 查看0messiah的博客楼主
    发贴心情 sax新手,一个简单的问题

    package xmlsax;

    import java.io.File;
    import java.io.IOException;
    import java.util.*;
    import javax.xml.parsers.ParserConfigurationException;
    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;

    /**
    *
    * @author Administrator
    */
    public class XMLParser extends DefaultHandler{
        Stack tags;
        int count;
        
        private static String sex;
        
        private String name;
        
        private String brith;
        
        private String pro;
        
        private String grade;
        
        private String classname;
        
        private String ElementName;
        
        private String proat;
        
        /** Creates a new instance of XMLParser */
        public XMLParser() {
            count = 0;
        }
        public void characters(char[] ch,int start,int length) {
            String tagBodyText=new String(ch,start,length);  //获得标签体的文字串内容
    /*
            下列的代码主要是识别是否是指定的名称的标签,如果是并且识别其标签体是否为空,最后获得标签体的文字串
    */
            
            if(this.ElementName.equals("姓名") && tagBodyText.equals("张三")) {
                this.name=tagBodyText;
            }
            if(this.ElementName.equals("出生日期")&& !tagBodyText.trim().equals("")) {
                this.brith=tagBodyText;
            }
            if(this.ElementName.equals("专业")&& !tagBodyText.trim().equals("")) {
                this.pro=tagBodyText;
            }
            if(this.ElementName.equals("年级") && !tagBodyText.trim().equals("")) {
                this.grade=tagBodyText;
            }
            if(this.ElementName.equals("班级") && !tagBodyText.trim().equals("")) {
                this.classname=tagBodyText;
            }
            
            
        }
        public void startDocument(){
            tags = new Stack();
            //count = 0;
        }
        public void endDocument(){
            System.out.println("总共有"+count+"个学生");
            System.out.println("姓名:"+name);
            System.out.println("性别:"+sex);
            System.out.println("出生日期:"+brith);
            System.out.println("专业:"+this.pro);
            System.out.println("年级:"+grade);
            System.out.println("班级:"+classname);
            System.out.println("方向:"+this.proat);
        }
        public void startElement(String namespaceURI, String localName, String qName, Attributes atts){
            tags.push(qName);
            if (qName.equals("学生信息")){
                count++;
                this.sex = atts.getValue(0);}this.ElementName=qName;        this.proat = atts.getValue(0);
        }
        public void endElement(String namespaceURI,String localName,String qName) throws SAXException {
            tags.pop();     //从Stack中获得标签的名称字符串
        }
        public static void main(String[] args){
            String filename = "student.xml";
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser saxparser = null;
            try {
                saxparser = spf.newSAXParser();
            } catch (ParserConfigurationException ex) {
                ex.printStackTrace();
            } catch (SAXException ex) {
                ex.printStackTrace();
            }
            try {
                saxparser.parse(new File(filename),new XMLParser());
            } catch (SAXException ex) {
                ex.printStackTrace();
                System.exit(1);
            } catch (IOException ex) {
                ex.printStackTrace();
                System.exit(1);
            }
        }
    }
    student.xml
    <?xml version="1.0" encoding="GB2312" standalone="yes" ?>
    <软件学院学生信息>
     <学生信息 性别="男">
      <姓名>张三</姓名>
      <出生日期>1987/10/18</出生日期>
      <专业>软件工程</专业>
      <年级>3</年级>
    <班级 方向="J2EE软件开发">软件1班</班级>
     </学生信息>
     <学生信息 性别="女">
      <姓名>李四</姓名>
      <出生日期>1988/2/18</出生日期>
      <专业>软件工程</专业>
      <年级>3</年级>
      <班级 方向="数字媒体方向">软件2班</班级>
     </学生信息>
    </软件学院学生信息>

    解析结果不对……


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/11/2 0:02:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DOM/SAX/XPath 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/1 10:34:58

    本主题贴数6,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  sax新手,一个简单的问题(3974字) - 0messiah,2007年11月2日
        回复:  sax我感觉还好吧,不就是几个触发事件么,遇到元素开始和结束,都会触发startelemnet和e..(95字) - fangel2000,2007年11月8日
        回复:  谢谢楼上的了,sax确实比dom难以理解一些。马上要学ajax了,不知道是不是更难一些。..(80字) - 0messiah,2007年11月8日
        回复:  修改后的代码如下所示:import java.io.File;import java.io..(3816字) - fangel2000,2007年11月5日
        回复:  不正确的原因主要是因为 if(this.ElementName.equals("姓..(291字) - fangel2000,2007年11月5日
        回复:  额,这个问题等会回来看看,有挑战性(34字) - fangel2000,2007年11月5日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms