App下載
首頁javasaxJava HTML/XML - 如何在SAX解析器處理程序中創(chuàng)建用戶對象

Java HTML/XML - 如何在SAX解析器處理程序中創(chuàng)建用戶對象

我們想知道如何在SAX解析器處理程序中創(chuàng)建用戶對象。
import java.io.StringReader;
import java.util.Vector;

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

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;

public class Main {
  public static void main(String args[]) throws Exception {
    SAXParserFactory spf = SAXParserFactory.newInstance();
    XMLReader reader = null;
    SAXParser parser = spf.newSAXParser();
    reader = parser.getXMLReader();
    reader.setErrorHandler(new MyErrorHandler());
    reader.setContentHandler(new MyTextHandler());
    
    StringReader sr = new StringReader("<folks><person><phone>502 555-2192</phone><name>B, M</name></person></folks>");
    
    
    //InputSource is = new InputSource("xmlFileName.xml");
    InputSource is = new InputSource(sr);
    reader.parse(is);
  }
}
class MyErrorHandler implements ErrorHandler {
  public void warning(SAXParseException e) throws SAXException {
    show("Warning", e);
    throw (e);
  }

  public void error(SAXParseException e) throws SAXException {
    show("Error", e);
    throw (e);
  }

  public void fatalError(SAXParseException e) throws SAXException {
    show("Fatal Error", e);
    throw (e);
  }

  private void show(String type, SAXParseException e) {
    System.out.println(type + ": " + e.getMessage());
    System.out.println("Line " + e.getLineNumber() + " Column " + e.getColumnNumber());
    System.out.println("System ID: " + e.getSystemId());
  }
}
class MyTextHandler implements ContentHandler {
  private boolean insideNameElement = false;
  private boolean insidePhoneElement = false;
  private boolean insideEmailElement = false;
  private Person person;
  private Vector<Person> personVec;
  public MyTextHandler() {
      personVec = new Vector<Person>();
  }

  public void setDocumentLocator(Locator locator) {
  }
  public void startDocument() {
  }
  public void endDocument() {
      for(int i=0; i<personVec.size(); i++) {
          Person p = (Person)personVec.elementAt(i);
          System.out.println(p.getName()+" "+p.getPhone()+" "+p.getEmail());
      }
  }

  public void startPrefixMapping(String prefix,String uri) { }
  public void endPrefixMapping(String prefix)  { }
  public void startElement(String namespaceURI,String localName,
          String qName,Attributes atts) {
      if(qName.equals("person")) {
          person = new Person();
      } else if(qName.equals("name")) {
          insideNameElement = true;
      } else if(qName.equals("phone")) {
          insidePhoneElement = true;
      } else if(qName.equals("email")) {
          insideEmailElement = true;
      }
  }

  public void endElement(String namespaceURI,String localName,
          String qName) {
      if(qName.equals("person")) {
          if(person != null){
              personVec.addElement(person);
          }
      } else if(qName.equals("name")) {
          insideNameElement = false;
      } else if(qName.equals("phone")) {
          insidePhoneElement = false;
      } else if(qName.equals("email")) {
          insideEmailElement = false;
      }
  }

  public void characters(char[] ch,int start,int length) {
      String str = "";
      for(int i=start; i<start + length; i++)
          str += ch[i];
      if(insideNameElement)
          person.setName(str);
      else if(insidePhoneElement)
          person.setPhone(str);
      else if(insideEmailElement)
          person.setEmail(str);
  }

  public void ignorableWhitespace(char[] ch,int start,int length) { }

  public void processingInstruction(String target,String data) { }

  public void skippedEntity(String name) { }

}

class Person {
  private String name = null;
  private String phone = null;
  private String email = null;
  public void setName(String value) {
      name = value;
  }
  public void setPhone(String value) {
      phone = value;
  }
  public void setEmail(String value) {
      email = value;
  }
  public String getName() {
      if(name == null)
          return("none");
      return(name);
  }
  public String getPhone() {
      if(phone == null)
          return("none");
      return(phone);
  }
  public String getEmail() {
      if(email == null)
          return("none");
      return(email);
  }
}