public interface EntityResolver2 extends EntityResolver
XMLReader.setEntityResolver()
方法用于提供此接口实现解析器。当解析器使用的方法在这个接口的方法,
EntityResolver2.resolveEntity()
(在这个界面)是用来代替旧的(萨克斯1)
EntityResolver.resolveEntity()
方法。
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY.
如果一个SAX应用要求定制处理定义为外部实体这个接口,就必须确保使用XmlReader将真实的http://xml.org/sax/features/use-entity-resolver2特征标志(这是默认值时,特征是公认的)。如果那个标志是无法识别的,或其值为假,或溶剂不实现这个接口,那么只有EntityResolver
方法将被使用。
支持修改实体分辨率的三类应用程序。旧式应用程序不会知道这个接口;他们将提供一个entityresolver。过渡模式提供了一个entityresolver2自动获得在任何系统的方法的好处(分析器或其他工具)的支持,由于多态性。旧的风格和过渡模式的应用程序将与任何SAX2解析器的工作。新风格的应用程序将无法运行在SAX2解析器支持除了这个特别的功能。他们将坚持特征标志具有值“真”和entityresolver2实现他们提供可能如果原来的SAX 1风格的实体解析方法时抛出异常。
XMLReader.setEntityResolver(org.xml.sax.EntityResolver)
Modifier and Type | Method and Description |
---|---|
InputSource |
getExternalSubset(String name, String baseURI)
允许应用程序提供一个不显式定义的文档的外部子集。
|
InputSource |
resolveEntity(String name, String publicId, String baseURI, String systemId)
允许应用程序映射到参考外部实体的输入源,或告诉解析器应该使用传统的URI解析。
|
resolveEntity
InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException
startDTD()
方法如果文档文本原本包括外部子集;这个回调是之前报道过的任何内部子集数据或错误。
这种方法也可以用于没有DOCTYPE声明文件。当根元素时,但没有DOCTYPE声明已经看出,这一方法被调用。如果它返回一个值,外部子集,根元素声明为根元素,使影响剪接DOCTYPE声明的最后一个文档,否则不能进行有效的语言。在这种情况下,解析器回调的逻辑顺序就像这:
…从序言的评论和PIS(像往常一样)startdtd(“根名称”,source.getpublicid(),source.getsystemid());startentity(“[定义]”);…声明,评论,和PIS从外部子集endentity(“[定义]”);enddtd();…然后剩下的文件(像往常一样)startElement(…,“根名称”,…);
请注意,inputsource没有得到进一步的解决方案。此方法的实现可能希望resolveEntity()
获得利益如使用DTD实体本地缓存。此外,这种方法将永远不会被(非验证)处理器,不包括外部参数实体。
该方法采用包括促进互操作时的数据验证XML处理器会总是需要外部实体访问不良网络,或其他原因采取“没有DTD”政策。非验证的动机包括强制文件包括DTD,属性是一致的方式处理。例如,一个XPath处理器需要知道哪些属性类型的“身份证”才可以处理广泛的类型的参考。
警告:返回一个外部子集修改输入文件。通过提供通用实体的定义,它可以使一个畸形的文档的出现以及形成。
name
标识文档根元素。这个名字来自一个DOCTYPE声明(如适用)或从实际的根元素。
baseURI
-文档的基URI作为一个额外的提示选择外部子集。这是一个绝对的URI,除非它是空的,了无一inputsource XmlReader。
SAXException
-萨克斯例外,可能是包装的另一个例外。
IOException
可能指示未能创建一个新的InputStream或Reader,或非法的URL。
InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException
EntityResolver
界面更灵活,支持更复杂的目录方案如一的
OASIS XML Catalogs规范定义的实现。
解析器配置为使用这个解析器方法将调用它来确定输入源来使用任何被包含在XML文本参考外部实体。排除的文件实体,和任何外部实体返回getExternalSubset()
。当一个(非验证)处理器被配置不包括一类实体(参数或通用)通过使用功能标志,这种方法不调用这样的实体。
注意,这里使用的实体命名方案是相同的一个用于LexicalHandler
,或在ContentHandler.skippedEntity()
方法。
name
标识解决外部实体。“[定义]“外部子集,或者一个名字开始与“%”来表示一个参数的实体,否则一般实体的名称。这是从来没有空时调用SAX2解析器。
publicId
-公众的外部实体引用的标识符(标准化的XML规范要求),如果提供的是无或空。
baseURI
- URI相对于它的相对系统的解释。这是一个绝对的URI,除非它是空的(可能是因为在被给予inputsource不一)。这个URI是由XML规范定义为一个与“<”开始申报。
systemId
-外部实体引用的标识符系统;要么是一个相对或绝对URI。这是从来没有空时调用SAX2解析器;只有宣布实体,和任何外部子集,通过这样的解析器解析。
SAXException
-萨克斯例外,可能是包装的另一个例外。
IOException
可能指示未能创建一个新的InputStream或Reader,或非法的URL。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.