You are here:  Home » Python » – SAX处理程序的基类 – 结构化标记处理工具(Python教程)(参考资料)

xml.sax.handler– SAX处理程序基类

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


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

class xml.sax.handler.ContentHandler

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

class xml.sax.handler.DTDHandler

处理DTD事件.

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

class xml.sax.handler.EntityResolver

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

class xml.sax.handler.ErrorHandler

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

除了这些类之外,xml.sax.handler还为特征和属性名称提供了符号常量.

xml.sax.handler.feature_namespaces
value:"http://xml.org/sax/features/namespaces"
true:执行命名空间处理.
false:可选择不执行命名空间处理(impliesnamespace-prefixes; default).
access :(解析)只读;(不解析)读/写
xml.sax.handler.feature_namespace_prefixes
value:"http://xml.org/sax/features/namespace-prefixes"
true:报告用于Namespacedeclarations的原始前缀名称和属性.
false:不报告用于命名空间声明的属性,最后不要报告原始的前缀名称(默认).
access :(解析)只读;(不解析)读/写
xml.sax.handler.feature_string_interning
value:"http://xml.org/sax/features/string-interning"
true:所有元素名称,前缀,属性名称,命名空间URI和本地名称都使用内置的实习函数实现.
false:名称不一定是实例,尽管它们可能是(默认).
access 🙁 parsing)只读;(不解析)读/写
xml.sax.handler.feature_validation
值:"http://xml.org/sax/features/validation"
true:报告所有验证错误(暗示外部通用实体和外部参数实体).
false:Do不报告验证错误.
access :(解析)只读;(不解析)读/写
xml.sax.handler.feature_external_ges
value:"http://xml.org/sax/features/external-general-entities"
true:包括所有外部通用(文本)实体.
false:不包括外部通用实体.
access :(解析)只读;(不解析)读/写
xml.sax.handler.feature_external_pes
value:"http://xml.org/sax/features/external-parameter-entities"
true:包含所有外部参数实体,包括外部DTDsubset。
false:不包含任何外部参数实体,甚至是externalDTD子集
//访问:(解析)只读;(不解析)读/写
xml.sax.handler.all_features

所有功能列表.

xml.sax.handler.property_lexical_handler
value:"http://xml.org/sax/properties/lexical-handler"
数据类型:xml.sax.sax2lib.LexicalHandler(Python 2中不支持)
描述:词法的可选扩展处理程序事件如评论.
access:读/写
xml.sax.handler.property_declaration_handler
值:"http://xml.org/sax/properties/declaration-handler"
数据类型:xml.sax.sax2lib.DeclHandler(Python 2不支持)
description:DTD相关事件的可选扩展处理程序,除了符号和未解析的实体之外.
access:读/写
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"
数据类型:字符串
描述:作为当前事件源的文字字符串.
access:只读
xml.sax.handler.all_properties

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

ContentHandler对象

用户应该是子类ContentHandler支持应用程序。解析器在输入文档中的相应事件上调用以下方法:

ContentHandler.setDocumentLocatorlocator

由解析器调用,为应用程序提供定位器来定位源文件事件

强烈鼓励(尽管不是绝对必要的)提供调优器解析器:如果它这样做,它必须通过调用此方法向应用程序提供定位器,然后再调用文档管理器接口中的任何其他方法.

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

请注意,定位器仅在调用此接口中的事件期间返回正确的信息。应用程序不应该在其他时间尝试使用它.

ContentHandler.startDocument ( )

接收文件开头的通知.

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

ContentHandler.endDocument

收到文件结尾的通知.

SAX解析器只会调用此方法一次,它将是解析期间调用的最后一个方法。解析器不会调用此方法,直到它放弃解析(由于不可恢复的错误)或到达输入结束时

ContentHandler.startPrefixMappingprefix, 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名称作为字符串,attrs参数包含Attributes接口的对象(请参阅属性接口)包含元素的属性。传递给attrs的对象可以被解析器重用;保持对它的引用并不是保存属性副本的可靠方法。要保留属性的副本,请使用copy()对象的attrs方法.

ContentHandler.endElementname

在非命名空间模式下表示元素的结尾.

name参数包含元素类型的名称,就像startElement() event.

ContentHandler.startElementNS(name, qname, attrs)

在命名空间模式中查找元素的开头时

name参数包含元素类型的名称(uri,localname)元组,qname参数包含源文档中使用的原始XML 1.0名称,以及attrs参数包含AttributesNS接口的实例(参见属性NS接口),其中包含元素的属性。如果没有与该元素关联的命名空间,uriname组件将是None。对象传递attrs可以由解析器重用;坚持对它的引用不是保存属性副本的可靠方法。要保留属性的副本,请使用copy()对象的attrs方法

解析器可以将qname参数设置为None,除非feature_namespace_prefixes功能被激活.

ContentHandler.endElementNS (name, qname

在命名空间模式中表示元素的结尾.

name参数包含元素类型的名称,就像startElementNS()方法一样,同样qname参数

ContentHandler.characters// (content

接收字符数据通知.

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

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

注意

Python XML Special Interest Group提供的早期SAX 1接口为此方法使用了更类似Java的接口。由于从Python使用的大多数解析器都没有利用旧的接口,因此选择更简单的签名来替换它。要将旧代码转换为新界面,请使用content而不是使用旧的offsetlength参数来覆盖内容.

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 )

接收跳过的实体的通知.

对于每个跳过的实体,Parser将调用此方法一次。非验证处理器可以在没有看到声明的情况下跳过实体(例如,因为实体是在外部DTD子集中声明的)。所有处理器都可以跳过外部实体,具体取决于feature_external_gesfeature_external_pes properties.

DTDHandler Objects

DTDHandler实例提供了以下方法:

DTDHandler.notationDeclname, publicId, systemId

办理符号声明活动.

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

处理未解析的实体声明事件.

EntityResolver Objects

EntityResolver.resolveEntitypublicId, systemId

解析实体的系统标识符,并返回systemidentifier以作为字符串读取,或返回要读取的InputSource。defaultimplementation返回systemId.

ErrorHandler对象

具有此接口的对象用于从XMLReader接收错误和警告信息。如果您创建一个对象来实现此接口,然后使用您的XMLReader注册该对象,解析器将调用您对象中的方法来报告所有警告和错误。有三种级别的错误:警告,(可能)可恢复的错误和不可恢复的错误。所有方法都以SAXParseException为唯一参数。通过提高传入的异常对象可以将错误和警告转换为异常.

ErrorHandler.error (exception)

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

ErrorHandler.fatalErrorexception)

当解析器遇到错误时无法恢复;当这个方法返回时,解析会被终止.

ErrorHandler.warning(exception)

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