正 文

利用SAX和Java分解常用的XML实体


www.7dspace.com  更新日期:2005-11-2 5:15:34  七度空间


EntityResolver界面非常简单,resolveEntity方法只需要简单地查看提供的公用和系统的标识符,然后返回一个指向实体值的InputSource。使用一个InputSource允许你通过StringReader提供一个简单的字符串值。

我们的句柄名为MySAXHandler,如表D所示。表E显示了运行名为EntityResolverExample程序的范例,程序通过 XMLReader界面执行SAX分解器。我们已经动态地简化了SAX句柄,它包含ContentHandler界面中的主要执行部分,这一界面只是显示了每一成分和相关字符数据的开始和结束部分。

表D: MySAXHandler.java

import org.xml.sax.*;
import java.io.*;

public class MySAXHandler implements ContentHandler {

  public void setDocumentLocator(Locator locator) {}

  public void startDocument() throws SAXException {}
  public void endDocument() throws SAXException {}

  public void startPrefixMapping(String prefix, String uri)
 throws SAXException {}

  public void endPrefixMapping(String prefix) throws
 SAXException {}

  public void startElement(String namespaceURI, String
 localName, String qualifiedName, Attributes atts) throws
 SAXException {
    System.out.println("Starting element: " + localName);
  }

  public void endElement(String namespaceURI, String
 localName, String qualifiedName) throws SAXException {
    System.out.println("Ending element: " + localName);
  }

  public void characters(char[] text, int start, int
 length) throws SAXException {
    String data = new String(text);
    System.out.println(data.substring(start, start +
 length));   
  }

  public void ignorableWhitespace(char[] text, int start,
 int length) throws SAXException {}

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

  public void skippedEntity(String name) throws
 SAXException {}
}

表E: EntityResolverExample.java

import org.xml.sax.*;
import org.xml.sax.helpers.*;

public class EntityResolverExample {
  public static void main (String[] args) {
    XMLReader parser;
    MySAXHandlermsh;
    CustomResolvermyResolver = new CustomResolver();
    try {
      parser = XMLReaderFactory.createXMLReader();
      msh = new MySAXHandler();
      parser.setContentHandler(msh);
      parser.setEntityResolver(myResolver);
      parser.parse("entity.xml");
    } catch (Exception e) {
      System.out.println (e);
    }
  }
}

EntityResolverExample类使用XMLReaderFactory通过XMLReader界面建立一个新的SAX分解器。然后我们在通用内容句柄中设置内容句柄,在通用实体解答器中设置实体解答器。最后,我们分解XML文档,可以看到成分的名称和已分解实体的值,如下所示:

Starting element: Entity
Starting element: CustomEntity
Resolving entity: -//Builder.com//TEXT MyCustomEntity//EN
This is a custom entity
Ending element: CustomEntity
Ending element: Entity

本文作者 :Brian Schaffnerj是日本Fujitsu(富士通)咨询的副董事。他为Fujitsu技术咨询应用提供了体系,设计,及开发支持。

2页,页码:[1] [2] 

上一篇:在关系数据库中保存大量XML文档
下一篇:全面!一套系统用图标
作者:Brian Schaffnerj  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐