Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 308|回复: 0

[xml学习]SAX解析XML文档入门15例

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 01:00:41 | 显示全部楼层 |阅读模式
    1. import javax.xml.parsers.*;
    2. import org.xml.sax.helpers.*;
    3. import org.xml.sax.*;
    4. import java.io.*;
    5. public class Example1{
    6.       public static void main(String args[]){
    7.            try{
    8.               SAXParserFactory factory=SAXParserFactory.newInstance();
    9.               SAXParser saxParser=factory.newSAXParser();//创建SAX解析器
    10.               MyHandler handler=new MyHandler();//创建事件处理器
    11.               saxParser.parse(new File("Example1.xml"),handler);//绑定文件和事件处理者
    12.               System.out.println("该XML文件共有"+handler.count+"标记");
    13.              }
    14.           catch(Exception e)
    15.                {System.out.println(e); }
    16.            }
    17.      }
    18. class MyHandler extends DefaultHandler{
    19.       int count=0;
    20.       public void startDocument(){//解析到文档开始时调用该方法
    21.          System.out.println("开始解析XML文件");
    22.          count++;
    23.          }
    24.       public void endDocument(){//解析到文档结束时调用该方法
    25.          System.out.println("解析文件结束");
    26.          count++;
    27.         }
    28.       public void startElement(String uri,String localName,String qName,Attributes atts){ //解析到标记开始时调用该方法
    29.           System.out.println("<"+qName+">");
    30.           count++;
    31.         }
    32.      public void endElement(String uri,String localName,String qName){//解析到标记结束时调用该方法
    33.           System.out.println("<"+qName+">");
    34.           count++;
    35.         }
    36.       public void characters(char[] ch,int start,int length){//解析到标记间的数据时调用该方法
    37.           String text=new String(ch,start,length);
    38.           System.out.println(text);
    39.           count++;
    40.         }
    41. }
    复制代码

       
       
       
        example1.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example1{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();//创建SAX解析器
                  MyHandler handler=new MyHandler();//创建事件处理器
                  saxParser.parse(new File("Example1.xml"),handler);//绑定文件和事件处理者
                  System.out.println("该XML文件共有"+handler.count+"标记");
                 }
              catch(Exception e)
                   {System.out.println(e); }
               }
         }
    class MyHandler extends DefaultHandler{
          int count=0;
          public void startDocument(){//解析到文档开始时调用该方法
             System.out.println("开始解析XML文件");
             count++;
             }
          public void endDocument(){//解析到文档结束时调用该方法
             System.out.println("解析文件结束");
             count++;
            }
          public void startElement(String uri,String localName,String qName,Attributes atts){ //解析到标记开始时调用该方法
              System.out.println("<"+qName+">");
              count++;
            }
         public void endElement(String uri,String localName,String qName){//解析到标记结束时调用该方法
              System.out.println("<"+qName+">");
              count++;
            }
          public void characters(char[] ch,int start,int length){//解析到标记间的数据时调用该方法
              String text=new String(ch,start,length);
              System.out.println(text);
              count++;
            }
    }
       
       
       
       
        example1
       

         <?xml version="1.0" encoding="GB2312"?>
    <员工名单>
       <员工>
           <姓名>黄胜霞</姓名>
           <岗位>前台接待</岗位>
       </员工>
    </员工名单>
       
       
       
       
        example2.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example2{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();
                  File file=new File("Example2.xml"); //创建File文件对象
                  MyHandler handler=new MyHandler(file);//创建MyHandler对象
                  saxParser.parse(file,handler);
                 }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          File file;
          long starttime,endtime;
          public MyHandler(File f){
                file=f;
           }
          public void startDocument(){
             starttime=System.currentTimeMillis();
             System.out.println("文件所在路径是"+file.getAbsolutePath());
             System.out.println("文件名为"+file.getName());
             System.out.println("开始解析XML文件---------");
            }
          public void endDocument(){
             System.out.println("解析XML文件结束--------");
             endtime=System.currentTimeMillis();
             System.out.println("文件解析共花费"+(endtime-starttime)+"秒");
            }
         }
       
       
       
       
        example2
       

         <?xml version="1.0" encoding="GB2312"?>
    <招聘单位>
       <单位>
           <名称>河南惠通公司</名称>
           <公司信息>软件开发和书本编辑</公司信息>
           <职位>项目经理</职位>   
           <岗位要求>计算机相关专业本科以上学历,三至五年工作经验</岗位要求>   
       </单位>
    </招聘单位>
       
       
       
       
        example3.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example3{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();
                  File file=new File("Example3.xml"); //创建文件对象file指向XML文件
                  MyHandler handler=new MyHandler(file);//创建事件处理器
                  saxParser.parse(file,handler);//用解析器把XML文件和事件处理器绑定
                 }
              catch(Exception e){System.out.println(e); }
          }
    }
    class MyHandler extends DefaultHandler{
         File file;
         public MyHandler(File f){
               file=f;
         }
         public void processingInstruction(String target,String data){
                System.out.println("处理指令的名称"+target);
                System.out.println("处理指令的内容"+data);
          }
    }
       
       
       
       
        example3
       

         <?xml version="1.0" encoding="gb2312"?>
    <?xml-stylesheet type="text/xsl" href="Example7.xsl"?>
    <火车票表>
    <车票>
    <班次>T99</班次>
    <始发时间>11:30</始发时间>
    </车票>
    <车票>
    <班次>S234</班次>
    <始发时间>13:04</始发时间>
    </车票>
    </火车票表>
       
       
       
       
        example4.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example4{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  factory.setNamespaceAware(true);//设定该解析器工厂支持名称空间
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example4.xml"),handler);
                 }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          int count=0;
          String str=null;
          public void startElement(String uri,String localName,String qName,Attributes atts){
               count++;
               if(uri.length()>0)
                 {str=uri;
                  System.out.println(str);
                 }  
              System.out.print("<"+qName+" ");
              for(int k=0;k<atts.getLength();k++){//获得该标记的属性,并输出属性名称和值。
                   System.out.print(atts.getLocalName(k)+"=");
                   System.out.print("""+atts.getValue(k)+""");
               }
              System.out.println(">");
            }
          public void endElement(String uri,String localName,String qName){
              System.out.println("</"+qName+">");
             }
         public void endDocument(){
             System.out.println("解析文件结束一共有"+count+"标记");
             System.out.println("文件使用的名称空间是"+str);
            }
    }
       
       
       
       
        example4
       

         <?xml version="1.0" encoding="gb2312"?>
    <root xmlns:p1="liu">
    <p1:聊天 grade="10">
      侃大山
    </p1:聊天>
    <p1:讲课 type="网络教学">
      传授知识
    </p1:讲课>
    <空话/>
    </root>
       
       
       
       
        example5.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example5{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example5.xml"),handler);
                 }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          boolean isDigit=false,zhusu=false,lufei=false;
          double personsum=0;
          int count=0;
          double zhususum=0,lufeisum=0;
          public void startElement(String uri,String localName,String qName,Attributes atts){
             System.out.print("<"+qName+">");
             if(qName.endsWith("费"))//判断标记间包含的是否是文本数据
                  isDigit=true;     
             if(qName.equals("住宿费"))
                  zhusu=true;
             if(qName.equals("路费"))
                  lufei=true;
             if(qName.equals("名称"))
                  {
                     count++;
                     personsum=0;
                   }
            }
          public void characters(char[] ch,int start,int length){
              String text=new String(ch,start,length);
              if(isDigit==true)//如果标记间的数据为文本数据
              {
                String str=text.trim();
                if(str.length()>0){
                    double dd=Double.parseDouble(str);
                    personsum=personsum+dd;
                    if(zhusu)
                        zhususum=zhususum+dd;
                    if(lufei)
                       lufeisum=lufeisum+dd;
                    isDigit=false;  
                   }
               }
              System.out.print(text);
            }
          public void endElement(String uri,String localName,String qName){
             System.out.print("<"+qName+">");
             zhusu=false;
             lufei=false;
             if(qName.equals("员工"))
                {
                   System.out.print("员工需要报销"+personsum+"元");  
                }
            }
           public void endDocument(){
                    System.out.println(" ");
                    System.out.println("员工住宿费的平均值为"+zhususum/count);
                    System.out.println("员工路费的平均值为"+lufeisum/count);
            }
    }

       
       
       
       
        example5
       

         <?xml version="1.0" encoding="gb2312"?>
    <员工报销单>
    <员工>
    <名称>魏怀超</名称>
    <住宿费>234.8</住宿费>
    <路费>150</路费>
    </员工>
    <员工>
    <名称>王利甫</名称>
    <住宿费>534.8</住宿费>
    <路费>232</路费>
    </员工>
    </员工报销单>
       
       
       
       
        example6.dtd
       

         <!ELEMENT 商品信息 (商品)>
    <!ELEMENT 商品 (名称,价钱)>
    <!ELEMENT 名称 (#PCDATA)>
    <!ELEMENT 价钱 (#PCDATA)>
       
       
       
       
        example6.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example6{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example6.xml"),handler);
                  }
              catch(Exception e){System.out.println(e); }
          }
    }
    class MyHandler extends DefaultHandler{
          int count=0;
          public void ignorableWhitespace(char[] ch,int start, int length){
              count++;
              System.out.println("第"+count+"个空白区");
          }
         public void endDocument(){
             System.out.println("解析文件结束报告了"+count+"次空白");
             
            }
    }
       
       
       
       
        example6
       

         <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE 商品信息 SYSTEM "Example6.dtd">
    <商品信息>
      <商品>
        <名称>海尔洗衣机</名称>
        <价钱>2999元</价钱>
      </商品>
    </商品信息>

       
       
       
       
        example7.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example7{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  factory.setNamespaceAware(true);//设定可以解析名称空间
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example7.xml"),handler);
                }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          int count=0;
          public void startPrefixMapping(String prefix,String uri)throws SAXException{
                   count++;
                   System.out.println("前缀"+prefix+" ");
                   System.out.println("名称空间的名称"+uri+" ");
           }
          public void endPrefixMapping(String prefix) throws SAXException{
                  System.out.println("前缀"+prefix+" ");
            }
          public void endDocument(){
             System.out.println("解析文件结束,报告了"+count+"次名称空间");
           }
    }
       
       
       
       
        example7
       

         <?xml version="1.0" encoding="GB2312" ?>
    <学生名单 xmlns:a="henan" xmlns:b="shangdong">
      <a:王峰>男,1992年出生</a:王峰>
      <b:王峰>男,1994年出生</b:王峰>
      <李明伟>女,1993年出生</李明伟>
    </学生名单>

       
       
       
       
        example8.dtd
       

         <!ENTITY hello "2008奥运会">
    <!ENTITY txt PUBLIC "-//ISO333/vvv/FORXML/EN" "Example8.txt">
       
       
       
       
        example8.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example8{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  factory.setNamespaceAware(true);
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example8.xml"),handler);
                  }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          int count=0;
          public InputSource resolveEntity(String publicId,String systemId){
              count++;
              System.out.println(publicId);
              System.out.println(systemId);
              return null;
           }
         public void characters(char[] ch,int start,int length){
              String text=new String(ch,start,length);
              System.out.print(text);
             }
        public void endDocument(){
             System.out.println("解析结束,报告了"+count+"个实体,包括DOCTYPE声明");
            }
    }
       
       
       
       
        example8.txt
       

         学习雷锋好榜样
       
       
       
       
        example8
       

         <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE 商场 PUBLIC "-//iso/Daxian/EN" "Example8.dtd">
    <商场>
      <柜台标语>
        &hello;&txt;
       </柜台标语>
    </商场>

       
       
       
       
        example9.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    import java.util.*;
    public class Example9{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example9.xml"),handler);
                  }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
            boolean bo=false;
            boolean sa=true;
            public void startElement(String uri,String localName,String qName,Attributes atts) {
              System.out.print("<"+qName+">");
              if(qName.equals("出生日期"))
                  bo=true;
             }
          public void endElement(String uri,String localName,String qName) {
              System.out.print("<"+qName+">");
             }
          public void characters(char[] ch,int start,int length) throws SAXException{
              String text=new String(ch,start,length);
              if(bo==true){
                  text=text.trim();
                  StringTokenizer fenxi=new StringTokenizer(text,"-");
                  int number=fenxi.countTokens();
                  String str[]=new String[number];
                  if(number!=3) {
                     sa=false;
                   }  
                  else{
                       int k=0;
                       while(fenxi.hasMoreTokens()){
                          str[k]=fenxi.nextToken();
                           k++;
                         }
                       try{
                           int year=Integer.parseInt(str[0]);
                           int month=Integer.parseInt(str[1]);
                           int day=Integer.parseInt(str[2]);
                           if(year<=1900 || year>=2009)
                               sa=false;
                           if(month<=0 || month>=13)
                               sa=false;
                           if(day<=0 || day>31)
                               sa=false;
                          }
                      catch(NumberFormatException e){sa=false;}
                    }
                 if(sa==false){
                        throw new SAXException("数据不合理,停止解析");
                   }  
                 else{
                        System.out.print(text);
                   }   
             }
             else{System.out.println(text);}
             
           }
    }
       
       
       
       
        example9
       

         <?xml version="1.0" encoding="GB2312" ?>
    <学生名单>
       <学生>
        <姓名>崔忠伟</姓名>
        <出生日期>2006-13-20</出生日期>
       </学生>
    </学生名单>
       
       
       
       
        example10.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    import javax.xml.transform.*;
    import javax.xml.transform.stream.*;
    import javax.xml.transform.dom.*;
    import org.w3c.dom.*;

    public class Example10{
         public static void main(String args[]){
               try{
                  SAXParserFactory factory1=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory1.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example10.xml"),handler);

                  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
                  DocumentBuilder builder=factory.newDocumentBuilder();
                  Document document=builder.newDocument();  //创建document节点对象
                  document.setXmlVersion("1.0");//设置使用XML文件的版本
                  Element root=document.createElement("图书列表");
                  document.appendChild(root);//设置XML文件的根结点
                 for(int k=1;k<=handler.str1.length;k++){
                         root.appendChild(document.createElement("图书"));
                     }  

                 NodeList nodeList=document.getElementsByTagName("图书");//获得图书的节点集合
                     int size=nodeList.getLength();
                     for(int k=0;k<size;k++){
                        Node node=nodeList.item(k);
                        if(node.getNodeType()==Node.ELEMENT_NODE)
                            {
                              Element elementNode=(Element)node;
                              elementNode.appendChild(document.createElement("名称"));//为图书添加一个名称标记
                              elementNode.appendChild(document.createElement("价格"));//为图书添加一个价格标记
                            }
                          }  


                       nodeList=document.getElementsByTagName("名称");//获得名字的节点集合
                       size=nodeList.getLength();
                       for(int k=0;k<size;k++){
                          Node node=nodeList.item(k);
                          if(node.getNodeType()==Node.ELEMENT_NODE){
                             Element elementNode=(Element)node;
                             elementNode.appendChild(document.createTextNode(handler.str0[k])); //为标记添加文本数据。
                          }
                      }

                     nodeList=document.getElementsByTagName("价格");//获得名字的节点集合
                       size=nodeList.getLength();
                       for(int k=0;k<size;k++){
                          Node node=nodeList.item(k);
                          if(node.getNodeType()==Node.ELEMENT_NODE){
                             Element elementNode=(Element)node;
                             elementNode.appendChild(document.createTextNode(handler.str1[k])); //为标记添加文本数据。
                          }
                      }   


                TransformerFactory transFactory=TransformerFactory.newInstance();//创建一个TransformerFactory(转换工厂对象)
                Transformer transformer=transFactory.newTransformer();//创建一个Transformer对像(文件转换对象)
                DOMSource domSource=new DOMSource(document); //把要转换的Document对象封装到一个DOMSource类中
                File file=new File("图书列表1.xml");
                FileOutputStream out=new FileOutputStream(file);
                StreamResult xmlResult=new StreamResult(out);//将要变换得到XML文件将来保存在StreamResult
                transformer.transform(domSource,xmlResult);//把节点树转换为XML文件


                 }
              catch(Exception e){
                  System.out.println(e);
                  e.printStackTrace();
                 }
          }
    }
    class MyHandler extends DefaultHandler{
             String str1[]=new String[3];
             String str0[]=new String[3];
              boolean letter=false,bo=false;
              int i=0;
              String aa;
             public void startElement(String uri,String localName,String qName,Attributes atts) {
               if(qName.equals("名称"))
                   {
                      bo=true;
                    }
               if(qName.equals("价格")){
                  letter=true;}
              }
             public void characters(char[] ch,int start,int length){
                String text=new String(ch,start,length);
                if(bo){
                   aa=text.trim();
                   bo=false;
                  }
                if(letter){
                     double dd=Double.parseDouble(text.trim());
                    if(dd>35){
                       str1=text.trim();
                        str0=aa;
                        i++;
                      }
                   letter=false;
                   }
            }
      }
       
       
       
       
        example10
       

         <?xml version="1.0" encoding="GB2312" ?>
    <书库>
    <图书>
      <名称>XML实践编程</名称>
      <作者>刘瑞银</作者>
      <类别>计算机图书</类别>
      <价格>39.8</价格>
    </图书>
    <图书>
      <名称>Java从入门到精通</名称>
      <作者>刘海松</作者>
      <类别>计算机图书</类别>
      <价格>58.2</价格>
    </图书>
    <图书>
      <名称>社会百态</名称>
      <作者>李天波</作者>
      <类别>文学图书</类别>
      <价格>29.3</价格>
    </图书>
    <图书>
      <名称>我们的家园</名称>
      <作者>温全国</作者>
      <类别>地理图书</类别>
      <价格>63</价格>
    </图书>
    <图书>
      <名称>金融动态</名称>
      <作者>石金峰</作者>
      <类别>经济类图书</类别>
      <价格>35</价格>
    </图书>
    </书库>
       
       
       
       
        example11.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example11{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example11.xml"),handler);
                  }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          Locator locator;
          int row,line;
          public void setDocumentLocator(Locator locator){
              this.locator=locator;
          }
          public void characters(char[] ch,int start,int length){
              String text=new String(ch,start,length);
              System.out.print(text);
              line=locator.getLineNumber();
              row=locator.getColumnNumber();
              System.out.print("[该数据末尾在文件中的位置("+row+","+line+")]");   
            }
    }
       
       
       
       
        example11
       

         <?xml version="1.0" encoding="GB2312" ?>
    <学生>
      <姓名>常红</姓名>
      <姓名>王峰</姓名>
    </学生>

       
       
       
       
        example12.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example12{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  factory.setNamespaceAware(true);//设定该解析器工厂支持名称空间
                  SAXParser saxParser=factory.newSAXParser();
                  MyHandler handler=new MyHandler();
                  saxParser.parse(new File("Example7.xml"),handler);
                }
              catch(Exception e){
                  System.out.println(e);
                 }
          }
    }
    class MyHandler extends DefaultHandler{
          public void startPrefixMapping(String prefix,String uri)throws SAXException{
                   System.out.println("前缀"+prefix+" ");
                   System.out.println("名称空间的名称"+uri+" ");
           }
    }
       
       
       
       
        example13.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example13{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();//创建SAX解析器
                  MyHandler handler=new MyHandler();//创建事件处理器
                  saxParser.parse(new File("Example13.xml"),handler);//绑定文件和事件处理者
                 }
              catch(Exception e)
                   {System.out.println(e); }
               }
         }
    class MyHandler extends DefaultHandler{
          public void characters(char[] ch,int start,int length){//解析到标记间的数据时调用该方法
              String text=new String(ch,start,length);
              System.out.println(text.trim());
            }
    }

       
       
       
       
        example13
       

         <?xml version="1.0" encoding="GB2312" ?>
    <员工名单>
    <员工>
    <名称>范强</名称>
    <职务>经理</职务>
    <工资>2200</工资>
    </员工>
    <员工>
    <名称>孙少元</名称>
    <职务>项目组长</职务>
    <工资>1897</工资>
    </员工>
    <员工>
    <名称>王冰</名称>
    <职务>普通员工</职务>
    <工资>1650</工资>
    </员工>
    <员工>
    <名称>刘华林</名称>
    <职务>经理</职务>
    <工资>2580</工资>
    </员工>
    </员工名单>
       
       
       
       
        example14.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example14{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();//创建SAX解析器
                  MyHandler handler=new MyHandler();//创建事件处理器
                  saxParser.parse(new File("Example13.xml"),handler);//绑定文件和事件处理者
                 }
              catch(Exception e)
                   {System.out.println(e); }
               }
         }
    class MyHandler extends DefaultHandler{
           boolean check=false;
           boolean gong=false;
           boolean mingc=false;
           String str1="",str2="",str3="";
           public void startElement(String uri,String localName,String qName,Attributes atts){
                 if(qName.equals("名称"))
                    mingc=true;
                 if(qName.equals("职务"))
                   check=true;
                 if(qName.equals("工资"))
                   gong=true;
            }
          public void characters(char[] ch,int start,int length){//解析到标记间的数据时调用该方法
              String text=new String(ch,start,length);
             
              if(mingc){
                   str1=text.trim();
                   mingc=false;
                }
              if(check){
                   if(text.trim().equals("经理")){
                          str2=text.trim();
                          check=false;  
                     }
                   
                }
              if(gong){
                   double dd=Double.parseDouble(text.trim());
                   if(dd>2500)
                   {
                     str3=text.trim();
                     System.out.print(str1+" .. "+str2+"   "+dd);
                   }
                   gong=false;
                }
            }
    }

       
       
       
       
        example15.java
       

         import javax.xml.parsers.*;
    import org.xml.sax.helpers.*;
    import org.xml.sax.*;
    import java.io.*;
    public class Example15{
          public static void main(String args[]){
               try{
                  SAXParserFactory factory=SAXParserFactory.newInstance();
                  SAXParser saxParser=factory.newSAXParser();//创建SAX解析器
                  MyHandler handler=new MyHandler();//创建事件处理器
                  saxParser.parse(new File("Example13.xml"),handler);//绑定文件和事件处理者
                 }
              catch(Exception e)
                   {System.out.println(e); }
               }
         }
    class MyHandler extends DefaultHandler{
              int jinsum=0,yuansum=0;
              boolean jingl=false;
              boolean yuang=false;
              boolean gongz=false;
            public void startElement(String uri,String localName,String qName,Attributes atts){
                     if(qName.equals("工资"))
                         gongz=true;
            }
          public void characters(char[] ch,int start,int length){
              String text=new String(ch,start,length);
              if(text.trim().equals("经理"))
                   {jingl=true;}
              if(text.trim().equals("普通员工"))
                   {yuang=true;}
               if(jingl && gongz){
                       double dd=Double.parseDouble(text.trim());
                      jinsum+=dd;
                       jingl=false;
                   }
              if(yuang && gongz){
                      double dd1=Double.parseDouble(text.trim());
                      yuansum+=dd1;
                      yuang=false;
                  
                   }
             gongz=false;
                
            }
         public void endDocument(){
             System.out.println("解析XML文件结束--------");
             System.out.println("经理工资合计"+jinsum);
             System.out.println("员工工资合计"+yuansum);
            }
    }

       
       
       
       
        example 4ss
       

         <?xml version="1.0" encoding="GB2312"?>
    <产品列表>
    <产品>
    <序列号>2586</序列号>
    <名称>餐桌</名称>
    <价格>499.00</价格>
    </产品>
    <产品>
    <序列号>2587</序列号>
    <名称>椅子</名称>
    <价格>199.00</价格>
    </产品>
    <产品>
    <序列号>2586</序列号>
    <名称>茶几</名称>
    <价格>19.99</价格>
    </产品>
    <产品>
    <序列号>2588</序列号>
    <名称>碗橱</名称>
    <价格>699.00</价格>
    </产品>
    </产品列表>
       
       
       
       
        图书列表1
       

         <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <图书列表>

    <图书>
    <名称>XML实践编程</名称>
    <价格>39.8</价格>
    </图书>

    <图书>
    <名称>Java从入门到精通</名称>
    <价格>58.2</价格>
    </图书>

    <图书>
    <名称>我们的家园</名称>
    <价格>63</价格>
    </图书>

    </图书列表>
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 17:55 , Processed in 0.388322 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表