Module java.xml

Package org.xml.sax


package org.xml.sax
提供了Simple API for XML (SAX)的接口。支持SAX1和SAX2两种API。

SAX2标准特性标志

SAX2的一个基本特征是增加了特性标志,可以用于检查和修改解析器模式,特别是验证模式。由于特性由(绝对)URI标识,任何人都可以定义这些特性。当前定义的标准特性URI在标识符之前具有前缀http://xml.org/sax/features/,例如validation。使用setFeature来打开或关闭特性。这些标准标识符包括:

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

必须支持namespacesnamespace-prefixes属性的默认值。对于任何其他特性标志的支持完全是可选的。

对于SAX2未指定的默认值,每个XMLReader实现都会指定其默认值,或者可以选择不公开特性标志。除非在此另有规定,实现可能支持更改这些标准特性标志的当前值,但不能在解析过程中进行更改。

SAX2标准处理程序和属性ID

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

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

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

API注释:
SAX API最初由SAX项目开发,自Java SE 1.4起已被定义。
自版本:
1.4