A Program to Display the Input from a SAX Parser: subclass ContentHandler : 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. 4. A Program to Display the Input from a SAX Parser: subclass ContentHandler
/*
Code revised from
Java, XML, and JAXP by Arthur Griffith John Wiley & Sons 2002

*/

import java.io.IOException;

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;

class MyContentHandler implements ContentHandler {
  private Locator locator;

  public void setDocumentLocator(Locator locator) {
    this.locator = locator;
    System.out.println("-" + locator.getLineNumber() "---Document ID: " + locator.getSystemId());
  }

  public void startDocument() {
    System.out.println("-" + locator.getLineNumber() "---Document parse started");
  }

  public void endDocument() {
    System.out.println("-" + locator.getLineNumber() "---Document parse ended");
  }

  public void startPrefixMapping(String prefix, String uri) {
    System.out.println("-" + locator.getLineNumber() "---Namespace scope begins");
    System.out.println("     " + prefix + "=\"" + uri + "\"");
  }

  public void endPrefixMapping(String prefix) {
    System.out.println("-" + locator.getLineNumber() "---Namespace scope ends");
    System.out.println("     " + prefix);
  }

  public void startElement(String namespaceURI, String localName, String qName, Attributes atts) {
    System.out.println("-" + locator.getLineNumber() "---Opening tag of an element");
    System.out.println("       Namespace: " + namespaceURI);
    System.out.println("      Local name: " + localName);
    System.out.println("  Qualified name: " + qName);
    for (int i = 0; i < atts.getLength(); i++) {
      System.out.println("       Attribute: " + atts.getQName(i"=\"" + atts.getValue(i"\"");
    }
  }

  public void endElement(String namespaceURI, String localName, String qName) {
    System.out.println("-" + locator.getLineNumber() "---Closing tag of an element");
    System.out.println("       Namespace: " + namespaceURI);
    System.out.println("      Local name: " + localName);
    System.out.println("  Qualified name: " + qName);
  }

  public void characters(char[] ch, int start, int length) {
    System.out.println("-" + locator.getLineNumber() "---Character data");
    showCharacters(ch, start, length);
  }

  public void ignorableWhitespace(char[] ch, int start, int length) {
    System.out.println("-" + locator.getLineNumber() "---Whitespace");
    showCharacters(ch, start, length);
  }

  public void processingInstruction(String target, String data) {
    System.out.println("-" + locator.getLineNumber() "---Processing Instruction");
    System.out.println("         Target: " + target);
    System.out.println("           Data: " + data);
  }

  public void skippedEntity(String name) {
    System.out.println("-" + locator.getLineNumber() "---Skipped Entity");
    System.out.println("           Name: " + name);
  }

  public void showCharacters(char[] ch, int start, int length) {
    System.out.print("        \"");
    for (int i = start; i < start + length; i++)
      switch (ch[i]) {
      case '\n':
        System.out.print("\\n");
        break;
      case '\r':
        System.out.print("\\r");
        break;
      case '\t':
        System.out.print("\\t");
        break;
      default:
        System.out.print(ch[i]);
        break;
      }
    System.out.println("\"");
  }
}

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());
  }
}

public class SAXDump {
  static public void main(String[] arg) {
    SAXParserFactory spf = SAXParserFactory.newInstance();
    XMLReader reader = null;
    try {
      SAXParser parser = spf.newSAXParser();
      reader = parser.getXMLReader();
    catch (Exception e) {
      System.err.println(e);
      System.exit(1);
    }

    reader.setErrorHandler(new MyErrorHandler());
    reader.setContentHandler(new MyContentHandler());

    try {
      InputSource is = new InputSource("test.xml");
      reader.parse(is);
    catch (SAXException e) {
      System.exit(1);
    catch (IOException e) {
      System.err.println(e);
      System.exit(1);
    }
  }
}
//File: test.xml
<roots>
  <a>
    <b>text</b>
  </a>
</roots>
-1---Document ID: file:///C:/Java_Dev/eclipse31/Eclipse/test.xml
-1---Document parse started
-1---Opening tag of an element
       Namespace: 
      Local name: 
  Qualified name: roots
-2---Character data
        "\n  "
-2---Opening tag of an element
       Namespace: 
      Local name: 
  Qualified name: a
-3---Character data
        "\n    "
-3---Opening tag of an element
       Namespace: 
      Local name: 
  Qualified name: b
-3---Character data
        "text"
-3---Closing tag of an element
       Namespace: 
      Local name: 
  Qualified name: b
-4---Character data
        "\n  "
-4---Closing tag of an element
       Namespace: 
      Local name: 
  Qualified name: a
-5---Character data
        "\n"
-5---Closing tag of an element
       Namespace: 
      Local name: 
  Qualified name: roots
-6---Document parse ended
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.