sax(用于处理XML事件驱动的推模型)解析例子

SAX解析

Java程序如下:

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class Test7 extends DefaultHandler
{
    int indent = 0;

   public Test7() {
   }
   
   public void startElement(String namespaceURI, String localName, 
           String qName, Attributes atts) throws SAXException {
       if (qName == "response") {
              System.out.println("User: " + atts.getValue("username"));
           } else if (qName == "question") {
              thisQuestion = atts.getValue("subject");
           }
              
           thisElement = qName;

    
   }
   
  public void endElement(String namespaceURI, String localName, String qName)
   throws SAXException {
       
       thisQuestion = "";
       thisElement = "";
   }
  public void characters(char[] ch, int start, int length)
  throws SAXException  {

    if (thisElement == "question") {
    printIndent(4);
    System.out.print(thisQuestion + ": ");
    System.out.println(new String(ch, start, length));
    }
  }




   public void startDocument() throws SAXException {
       System.out.println("Tallying survey results...");   
       indent = -4;

   }
   
   public void printIndent(int indentSize) {
       for (int s = 0; s < indentSize; s++) {
          System.out.print(" ");
       }
    }
   
   String thisQuestion = "";
   String thisElement = "";




   public static void main (String args[]) {
      
   XMLReader xmlReader = null;
      
      try {

         SAXParserFactory spfactory = SAXParserFactory.newInstance();
         
         SAXParser saxParser = spfactory.newSAXParser();

         xmlReader = saxParser.getXMLReader();
         xmlReader.setContentHandler(new Test7());

         InputSource source = new InputSource("surveys.xml");
         xmlReader.parse(source);
         
         
      } catch (Exception e) {
            System.err.println(e);
            System.exit(1);
      }
      

   }
}


xml文件如下:

<?xml version="1.0"?>
<surveys>
    <response username="bob">
       <question subject="appearance">A</question>
       <question subject="communication">B</question>
       <question subject="ship">A</question>
       <question subject="inside">D</question>
       <question subject="implant">B</question>
    </response>
    <response username="sue">
       <question subject="appearance">C</question>
       <question subject="communication">A</question>
       <question subject="ship">A</question>
       <question subject="inside">D</question>
       <question subject="implant">A</question>
    </response>
    <response username="carol">
       <question subject="appearance">A</question>
       <question subject="communication">C</question>
       <question subject="ship">A</question>
       <question subject="inside">D</question>
       <question subject="implant">C</question>
    </response>
</surveys>

执行效果如下:

Tallying survey results...
User: bob
    appearance: A
    communication: B
    ship: A
    inside: D
    implant: B
User: sue
    appearance: C
    communication: A
    ship: A
    inside: D
    implant: A
User: carol
    appearance: A
    communication: C
    ship: A
    inside: D
    implant: C

转载于:https://www.cnblogs.com/dreamzhiya/p/3909670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值