Module java.xml
Package org.xml.sax

Interface EntityResolver

所有已知的子接口:
CatalogResolver, EntityResolver2
所有已知的实现类:
DefaultHandler, DefaultHandler2, HandlerBase, XMLFilterImpl

public interface EntityResolver
用于解析实体的基本接口。

如果一个SAX应用程序需要实现对外部实体的定制处理,它必须实现这个接口,并使用setEntityResolver方法向SAX驱动程序注册一个实例。

然后XML阅读器将允许应用程序拦截任何外部实体(包括外部DTD子集和外部参数实体,如果有的话)然后再包含它们。

许多SAX应用程序不需要实现这个接口,但对于从数据库或其他专门输入源构建XML文档的应用程序,或者对于使用除URL之外的URI类型的应用程序,这将特别有用。

以下解析器将为应用程序提供一个特殊的字符流,用于系统标识符为"http://www.myhost.com/today"的实体:

 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;

 public class MyResolver implements EntityResolver {
   public InputSource resolveEntity (String publicId, String systemId)
   {
     if (systemId.equals("http://www.myhost.com/today")) {
              // 返回一个特殊的输入源
       MyReader reader = new MyReader();
       return new InputSource(reader);
     } else {
              // 使用默认行为
       return null;
     }
   }
 }
 

应用程序还可以使用这个接口将系统标识符重定向到本地URI,或者通过目录查找替换(可能使用公共标识符)。

自从:
1.4, SAX 1.0
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    resolveEntity(String publicId, String systemId)
    允许应用程序解析外部实体。
  • Method Details

    • resolveEntity

      InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
      允许应用程序解析外部实体。

      解析器将在打开任何外部实体之前调用此方法,除了顶层文档实体之外。这些实体包括外部DTD子集和在DTD中引用的外部参数实体(在任一情况下,仅当解析器读取外部参数实体时),以及在文档元素中引用的外部一般实体(如果解析器读取外部一般实体)。应用程序可以请求解析器自己定位实体,使用替代URI,或者使用应用程序提供的数据(作为字符或字节输入流)。

      应用程序编写者可以使用这个方法将外部系统标识符重定向到安全和/或本地URI,查找目录中的公共标识符,或者从数据库或其他输入源(包括例如对话框)读取实体。XML和SAX都没有指定使用公共或系统ID来解析资源的首选策略。但是,SAX指定了如何解释此方法返回的任何InputSource,如果没有返回任何InputSource,则系统ID将被解析为URL。

      如果系统标识符是一个URL,则SAX解析器必须在将其报告给应用程序之前完全解析它。

      参数:
      publicId - 引用的外部实体的公共标识符,如果没有提供则为null。
      systemId - 引用的外部实体的系统标识符。
      返回:
      描述新输入源的InputSource对象,或者为了请求解析器打开一个常规URI连接到系统标识符而返回null。
      抛出:
      SAXException - 任何SAX异常,可能包装另一个异常。
      IOException - 一个特定于Java的IO异常,可能是为InputSource创建新的InputStream或Reader的结果。
      参见: