模块 java.xml

接口 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")) {
       // return a special input source
    MyReader reader = new MyReader();
    return new InputSource(reader);
   } else {
       // use the default behaviour
    return null;
   }
  }
 }
 

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

自从:
1.4, SAX 1.0
参见:
  • 方法总结

    修饰符和类型
    方法
    描述
    resolveEntity(String publicId, String systemId)
    允许应用程序解析外部实体。
  • 方法详情

    • resolveEntity

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

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

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

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

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