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