模块 java.xml

包 org.xml.sax


org.xml.sax
为 XML (SAX) 的简单 API 提供接口。同时支持 SAX1 和 SAX2 API。

SAX2 标准功能标志

SAX2 的基本特征之一是它添加了可用于检查并可能修改解析器模式的功能标志,特别是验证等模式。由于功能由(绝对)URI 标识,因此任何人都可以定义此类功能。当前定义的标准功能 URI 在诸如 validation 之类的标识符之前具有前缀 http://xml.org/sax/features/。使用 setFeature 打开或关闭功能。这些标准标识符是:

标准功能
功能编号 访问权限 默认 Description
external-general-entities read/write unspecified 报告此解析器是否处理外部一般实体;验证时始终为真。
external-parameter-entities read/write unspecified 报告此解析器是否处理外部参数实体;验证时始终为真。
is-standalone (解析)read-only,(不解析)none 不适用 只能在解析期间检查,在startDocument()回调完成之后;只读。如果文档在其 XML 声明中指定 standalone="yes",则该值为 true,否则为 false。
lexical-handler/parameter-entities read/write unspecified “true”值表示 LexicalHandler 将报告参数实体的开始和结束。
namespaces read/write true “true”值表示命名空间 URI 和元素和属性名称的无前缀本地名称将可用。
namespace-prefixes read/write false “true”值表示 XML 限定名称(带前缀)和属性(包括 xmlns* 属性)将可用。
resolve-dtd-uris read/write true “true”值表示声明中的系统 ID 在报告之前将被绝对化(相对于它们的基本 URI)。 (这是所有 SAX2 XML 解析器的默认行为。)“false”值表示这些 ID 不会被绝对化;解析器将提供来自 Locator.getSystemId() 的基本 URI。这适用于传入的系统 ID
  • DTDHandler.notationDecl() ,
  • DTDHandler.unparsedEntityDecl()
  • DeclHandler.externalEntityDecl() .
它不适用于不用于报告声明的 EntityResolver.resolveEntity() 或已经提供非绝对化 URI 的 LexicalHandler.startDTD()
string-interning read/write unspecified 如果所有 XML 名称(对于元素、前缀、属性、实体、符号和本地名称)以及名称空间 URI 都已使用 java.lang.String.intern 进行了驻留,则值为“true”。这支持对字符串常量进行相等/不相等的快速测试,而不是强制对 String.equals() 进行较慢的调用。
unicode-normalization-checking read/write false 控制解析器是否报告 Unicode 规范化错误,如 XML 1.1 Recommendation 的第 2.13 节和附录 B 中所述。如果为真,则使用 ErrorHandler.error() 回调报告 Unicode 规范化错误。这些错误本身并不是致命的(但很明显,其他与 Unicode 相关的编码错误可能是致命的)。
use-attributes2 read-only 不适用 如果 ContentHandler.startElement() 中此解析器传递的 Attributes 对象实现了 org.xml.sax.ext.Attributes2 接口,则返回“真”。该接口公开了额外的 DTD 相关信息,例如属性是否在源文本中指定而不是默认的。
use-locator2 read-only 不适用 如果 ContentHandler.setDocumentLocator() 中此解析器传递的 Locator 对象实现了 org.xml.sax.ext.Locator2 接口,则返回“真”。该接口公开了额外的实体信息,例如字符编码和使用的 XML 版本。
use-entity-resolver2 read/write true 如果在给setEntityResolver 一个实现org.xml.sax.ext.EntityResolver2 接口的对象时将使用这些新方法,则返回“true”。返回“false”以指示不会使用这些方法。
validation read/write unspecified 控制解析器是否报告所有有效性错误;如果为真,将读取所有外部实体。
xmlns-uris read/write false 控制在设置 namespace-prefixes 功能时,解析器是否将命名空间声明属性视为在 http://www.w3.org/2000/xmlns/ 命名空间中。默认情况下,SAX2 符合最初的“XML 中的名称空间”建议,该建议明确指出此类属性不在任何名称空间中。将此可选标志设置为“true”可使 SAX2 事件符合该建议的后向不兼容修订版,将这些属性放置在名称空间中。
xml-1.1 read-only 不适用 如果解析器同时支持 XML 1.1 和 XML 1.0,则返回“true”。如果解析器仅支持 XML 1.0,则返回“false”。

需要支持 namespacesnamespace-prefixes 属性的默认值。对任何其他功能标志的支持完全是可选的。

对于 SAX2 未指定的默认值,每个 XMLReader 实现都指定其默认值,或者可以选择不公开功能标志。除非此处另有说明,否则实现可能支持更改这些标准功能标志的当前值,但在解析时不支持。

SAX2 标准处理程序和属性 ID

对于描述为对象的解析器接口特征,定义了一个单独的名称空间。此命名空间中的对象再次由 URI 标识,并且标准属性 URI 在标识符(例如 lexical-handlerdom-node )之前具有前缀 http://xml.org/sax/properties/ 。使用 setProperty() 管理这些属性。这些标识符是:

标准属性 ID
属性ID Description
declaration-handler 用于查看大多数 DTD 声明,除了那些被视为词法的声明(“文档元素名称是...”)或所有 SAX 解析器所必需的声明(DTDHandler)。对象必须实现 org.xml.sax.ext.DeclHandler
document-xml-version 只能在解析期间检查,在 startDocument() 回调完成之后;只读。此属性是描述文档实际 XML 版本的文字字符串,例如“1.0”或“1.1”。
dom-node 对于忽略其 parser.parse() 参数的“DOM Walker”样式解析器,这用于指定解析器遍历的 DOM(子)树。对象必须实现 org.w3c.dom.Node 接口。
lexical-handler 用于查看某些应用程序中必不可少的一些语法事件:注释、CDATA 分隔符、选定的一般实体包含以及 DTD 的开始和结束(以及文档元素名称的声明)。对象必须实现 org.xml.sax.ext.LexicalHandler
xml-string 仅在解析器回调期间可读,这公开了一个TBS负责当前事件的字符块。

所有这些标准属性都是可选的。不需要 XMLReader 实现来支持它们。

API 注意:
SAX API 最初在 SAX 项目 开发,从 1.4 开始就由 Java SE 定义。
自从:
1.4