xml.sax.handler ---SAX处理程序的基类

源代码: Lib/xml/sax/handler.py


saxapi定义了五种处理程序:内容处理程序、DTD处理程序、错误处理程序、实体解析器和词法处理程序。应用程序通常只需要实现它们感兴趣的那些接口;它们可以在单个对象或多个对象中实现接口。处理程序实现应该继承模块中提供的基类 xml.sax.handler ,以便所有方法都获得默认实现。

class xml.sax.handler.ContentHandler

这是SAX中的主回调接口,也是应用程序最重要的接口。此接口中的事件顺序反映了文档中信息的顺序。

class xml.sax.handler.DTDHandler

处理DTD事件。

此接口仅指定基本分析所需的DTD事件(未分析的实体和属性)。

class xml.sax.handler.EntityResolver

用于解析实体的基本接口。如果您创建一个实现此接口的对象,然后用您的解析器注册该对象,解析器将调用对象中的方法来解析所有外部实体。

class xml.sax.handler.ErrorHandler

分析器用于向应用程序显示错误和警告消息的接口。此对象的方法控制错误是立即转换为异常,还是以其他方式处理。

class xml.sax.handler.LexicalHandler

解析器用来表示许多应用程序可能不感兴趣的低频事件的接口。

除了这些课程, xml.sax.handler 为功能和属性名称提供符号常量。

xml.sax.handler.feature_namespaces
价值观: "http://xml.org/sax/features/namespaces"
真:执行命名空间处理。
错误:可以选择不执行命名空间处理(暗示命名空间前缀;默认值)。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.feature_namespace_prefixes
价值观: "http://xml.org/sax/features/namespace-prefixes"
正确:报告用于命名空间声明的原始前缀名称和属性。
错误:不报告用于命名空间声明的属性,也可以不报告原始前缀名称(默认)。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.feature_string_interning
价值观: "http://xml.org/sax/features/string-interning"
正确:所有元素名、前缀、属性名、名称空间URI和本地名称都是使用内置的intern函数进行实习生的。
错误:名称不一定是实习生,尽管它们可能是(默认)。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.feature_validation
价值观: "http://xml.org/sax/features/validation"
正确:报告所有验证错误(表示外部常规实体和外部参数实体)。
错误:不报告验证错误。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.feature_external_ges
价值观: "http://xml.org/sax/features/external-general-entities"
正确:包括所有外部常规(文本)实体。
错误:不包括外部常规实体。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.feature_external_pes
价值观: "http://xml.org/sax/features/external-parameter-entities"
真:包括所有外部参数实体,包括外部DTD子集。
错误:不包括任何外部参数实体,甚至外部DTD子集。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.all_features

所有功能的列表。

xml.sax.handler.property_lexical_handler
价值观: "http://xml.org/sax/properties/lexical-handler"
数据类型:xml.sax.handler.LexicalHandler(Python 2不支持)
描述:用于词汇事件(如注释)的可选扩展处理程序。
访问:读/写
xml.sax.handler.property_declaration_handler
价值观: "http://xml.org/sax/properties/declaration-handler"
数据类型:xml.sax.sax2lib.declHandler(python 2不支持)
描述:DTD相关事件的可选扩展处理程序,而不是符号和未分析的实体。
访问:读/写
xml.sax.handler.property_dom_node
价值观: "http://xml.org/sax/properties/dom-node"
数据类型:org.w3c.dom.node(python 2不支持)
描述:解析时,如果这是一个dom迭代器,当前访问的dom节点;不解析时,迭代的根dom节点。
访问:(解析)只读;(不解析)读/写
xml.sax.handler.property_xml_string
价值观: "http://xml.org/sax/properties/xml-string"
数据类型:字符串
描述:当前事件的源字符串。
访问:只读
xml.sax.handler.all_properties

所有已知属性名称的列表。

ContentHandler对象

用户需要子类 ContentHandler 支持他们的应用。解析器对输入文档中的适当事件调用以下方法:

ContentHandler.setDocumentLocator(locator)

由分析器调用,为应用程序提供一个定位程序,用于定位文档事件的起源。

强烈建议SAX解析器(尽管并非绝对必需)提供定位器:如果这样做,则必须在调用文档处理程序接口中的任何其他方法之前通过调用此方法向应用程序提供定位器。

定位器允许应用程序确定任何与文档相关事件的结束位置,即使解析器没有报告错误。通常,应用程序将使用此信息报告自己的错误(例如与应用程序的业务规则不匹配的字符内容)。定位器返回的信息可能不足以用于搜索引擎。

注意,定位器只在调用这个接口中的事件时返回正确的信息。应用程序不应在任何其他时间尝试使用它。

ContentHandler.startDocument()

接收文档开始的通知。

SAX解析器将只调用此方法一次,在此接口或DTDhandler中的任何其他方法之前(除了 setDocumentLocator()

ContentHandler.endDocument()

接收文档结束通知。

SAX解析器将只调用此方法一次,它将是解析过程中调用的最后一个方法。在放弃解析(由于不可恢复的错误)或达到输入结尾之前,解析器不应调用此方法。

ContentHandler.startPrefixMapping(prefix, uri)

开始前缀URI命名空间映射的作用域。

此事件中的信息对于正常的命名空间处理不是必需的:当 feature_namespaces 功能已启用(默认)。

但是,在某些情况下,应用程序需要在字符数据或属性值中使用前缀,而这些前缀不能安全地自动扩展; startPrefixMapping()endPrefixMapping() 事件向应用程序提供信息,以便在必要时在这些上下文中扩展前缀。

注意 startPrefixMapping()endPrefixMapping() 不能保证事件彼此正确嵌套:全部 startPrefixMapping() 事件将在相应的 startElement() 事件,以及所有 endPrefixMapping() 事件将在相应的 endElement() 事件,但他们的订单不能保证。

ContentHandler.endPrefixMapping(prefix)

结束前缀URI映射的作用域。

startPrefixMapping() 详情。此事件将始终发生在 endElement() 事件,但顺序 endPrefixMapping() 事件没有其他保证。

ContentHandler.startElement(name, attrs)

以非名称空间模式表示元素的开始。

这个 name 参数包含作为字符串的元素类型的原始XML 1.0名称,以及 阿特斯 参数包含的对象 Attributes 界面(见) 这个 Attributes 界面 )包含元素的属性。对象作为 阿特斯 解析器可能会重复使用;保持对它的引用不是保存属性副本的可靠方法。要保留属性的副本,请使用 copy() 方法 阿特斯 对象。

ContentHandler.endElement(name)

以非名称空间模式表示元素的结尾。

这个 name 参数包含元素类型的名称,与 startElement() 事件。

ContentHandler.startElementNS(name, qname, attrs)

以名称空间模式表示元素的开始。

这个 name 参数将元素类型的名称作为 (uri, localname) 图普尔 QNEX 参数包含源文档中使用的原始XML 1.0名称,以及 阿特斯 参数保存的实例 AttributesNS 界面(见) 这个 AttributesNS 界面 )包含元素的属性。如果没有与元素关联的命名空间,则 uri 组成部分 nameNone . 对象作为 阿特斯 解析器可能会重复使用;保持对它的引用不是保存属性副本的可靠方法。要保留属性的副本,请使用 copy() 方法 阿特斯 对象。

解析器可以设置 QNEX 参数到 None ,除非 feature_namespace_prefixes 功能已激活。

ContentHandler.endElementNS(name, qname)

以名称空间模式表示元素的结尾。

这个 name 参数包含元素类型的名称,与 startElementNS() 方法,同样 QNEX 参数。

ContentHandler.characters(content)

接收字符数据通知。

解析器将调用此方法来报告每个字符数据块。SAX解析器可以返回单个块中的所有连续字符数据,或者将其拆分为多个块;但是,任何单个事件中的所有字符都必须来自同一外部实体,以便定位器提供有用的信息。

内容 可以是字符串或字节实例;该 expat 读卡器模块总是产生字符串。

注解

Python XML特殊兴趣组提供的较早的SAX 1接口为该方法使用了更类似Java的接口。由于从python使用的大多数解析器没有利用旧的接口,所以选择了更简单的签名来替换它。要将旧代码转换为新接口,请使用 内容 而不是用旧的 抵消长度 参数。

ContentHandler.ignorableWhitespace(whitespace)

接收元素内容中可忽略空白的通知。

验证解析器必须使用此方法来报告每个可忽略空白块(请参见W3C XML 1.0建议,第2.10节):如果非验证解析器能够解析和使用内容模型,则也可以使用此方法。

SAX解析器可以返回单个块中所有连续的空白,或者将其拆分为多个块;但是,任何单个事件中的所有字符都必须来自同一外部实体,以便定位器提供有用的信息。

ContentHandler.processingInstruction(target, data)

接收处理指令通知。

对于找到的每个处理指令,解析器将调用此方法一次:请注意,处理指令可能发生在主文档元素之前或之后。

SAX解析器不应使用此方法报告XML声明(XML 1.0,第2.8节)或文本声明(XML 1.0,第4.3.1节)。

ContentHandler.skippedEntity(name)

接收跳过实体的通知。

对于跳过的每个实体,解析器将调用此方法一次。如果未验证的处理器没有看到声明,则可以跳过实体(例如,因为实体是在外部DTD子集中声明的)。所有处理器都可以跳过外部实体,具体取决于 feature_external_ges 以及 feature_external_pes 性质。

DTDhandler对象

DTDHandler 实例提供以下方法:

DTDHandler.notationDecl(name, publicId, systemId)

处理符号声明事件。

DTDHandler.unparsedEntityDecl(name, publicId, systemId, ndata)

处理未分析的实体声明事件。

EntityResolver对象

EntityResolver.resolveEntity(publicId, systemId)

解析实体的系统标识符,并返回要作为字符串读取的系统标识符或要读取的输入源。默认实现返回 系统ID .

错误处理程序对象

具有此接口的对象用于从 XMLReader . 如果创建实现此接口的对象,则使用 XMLReader 分析器将调用对象中的方法来报告所有警告和错误。有三个级别的错误可用:警告,(可能)可恢复的错误和不可恢复的错误。所有方法都需要 SAXParseException 作为唯一的参数。错误和警告可以通过引发传入的异常对象转换为异常。

ErrorHandler.error(exception)

当分析器遇到可恢复的错误时调用。如果此方法不引发异常,则可以继续解析,但应用程序不应期望得到进一步的文档信息。允许解析器继续可能允许在输入文档中发现其他错误。

ErrorHandler.fatalError(exception)

当分析器遇到无法恢复的错误时调用;当此方法返回时,解析将终止。

ErrorHandler.warning(exception)

当分析器向应用程序提供次要警告信息时调用。当此方法返回时,解析将继续,文档信息将继续传递给应用程序。在此方法中引发异常将导致分析结束。

词典处理程序对象

词法事件的可选SAX2处理程序。

此处理程序用于获取有关XML文档的词法信息。词法信息包括描述所使用的文档编码和文档中嵌入的XML注释的信息,以及DTD和任何CDATA部分的节边界。词法处理程序的使用方式与内容处理程序相同。

使用带有属性标识符的setProperty方法设置XMLReader的LexicalHandler 'http://xml.org/sax/properties/lexical-handler' .

LexicalHandler.comment(content)

报告文档中任何位置的注释(包括DTD和文档元素外部)。

LexicalHandler.startDTD(name, public_id, system_id)

如果文档有关联的DTD,则报告DTD声明的开始。

LexicalHandler.endDTD()

报告DTD声明的结束。

LexicalHandler.startCDATA()

报告CDATA标记的节的开始。

CDATA标记部分的内容将通过字符处理程序报告。

LexicalHandler.endCDATA()

报告CDATA标记的节的结束。