内容句柄输出排序名单 : SAX « XML « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » XML » SAX 
33. 1. 6. 内容句柄输出排序名单
/*
Code revised from
Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

*/


import java.io.IOException;
import java.io.PrintWriter;
import java.util.Vector;

import javax.xml.parsers.ParserConfigurationException;
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 MappingContentHandler {
  static public void main(String[] arg) {
    try {
      SAXParserFactory spf = SAXParserFactory.newInstance();
      SAXParser parser = spf.newSAXParser();
      XMLReader reader = parser.getXMLReader();
      reader.setErrorHandler(new MyErrorHandler());
      MyTextHandler duper = new MyTextHandler();
      reader.setContentHandler(duper);
      InputSource is = new InputSource("person.xml");
      reader.parse(is);
    catch (SAXException e) {
      System.out.println(e);
    catch (ParserConfigurationException e) {
      System.err.println(e);
      System.exit(1);
    catch (IOException e) {
      System.err.println(e);
      System.exit(1);
    }
  }
}

class MyErrorHandler implements ErrorHandler {
  public void warning(SAXParseException ethrows SAXException {
    show("Warning", e);
    throw (e);
  }

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

  public void fatalError(SAXParseException ethrows 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);
  }
}
//File: person.xml
<?xml version="1.0" standalone="yes"?>

<folks>
    <person>
        <phone>999 555-8888</phone>
        <email>e@yoursite.net</email>
        <name>R, L</name>
    </person>
    <person>
        <phone>333 555-9910</phone>
        <name>V, R</name>
        <email>rv@yoursite.com</email>
    </person>
    <person>
        <name>B, D.</name>
        <email>b@xyz.net</email>
    </person>
    <person>
        <phone>502 555-2192</phone>
        <name>B, M</name>
    </person>
</folks>
R, L 999 555-8888 e@yoursite.net
V, R 333 555-9910 rv@yoursite.com
B, D. none b@xyz.net
B, M 502 555-2192 none
33. 1. SAX
33. 1. 1. SAX解析器所有事件显示
33. 1. 2. SAX Error Checking: A Simple Implementation of the ErrorHandler Interface
33. 1. 3. XMLReader接口
33. 1. 4. A Program to Display the Input from a SAX Parser: subclass ContentHandler
33. 1. 5. A Class to Convert SAX Parse Information into an XML Document
33. 1. 6. 内容句柄输出排序名单
33. 1. 7. SAX解析器遍历一个DOM文档
33. 1. 8. Intercepting All Accesses to External Entities During XML SAX Parsing
33. 1. 9. SAX分析器执行访问
33. 1. 10. SAX分析器异常
33. 1. 11. 用简单的SAX文件句柄分析XML
33. 1. 12. 配置SAX解析器工厂,候补解析器
33. 1. 13. 使用XML查询分析器显示当前位置
33. 1. 14. 调用。NET Web服务
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.