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

你可能感兴趣的:(事件驱动)