– 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_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.
setDocumentLocator
(locator)-
由解析器调用,为应用程序提供定位器来定位源文件事件
强烈鼓励(尽管不是绝对必要的)提供调优器解析器:如果它这样做,它必须通过调用此方法向应用程序提供定位器,然后再调用文档管理器接口中的任何其他方法.
定位器允许应用程序确定任何与文档相关的事件的结束位置,即使解析器没有报告错误。通常,应用程序将使用此信息报告其自身的错误(例如与应用程序的业务规则不匹配的字符内容)。定位器返回的信息可能不足以与搜索引擎一起使用.
请注意,定位器仅在调用此接口中的事件期间返回正确的信息。应用程序不应该在其他时间尝试使用它.
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名称作为字符串,attrs参数包含
Attributes
接口的对象(请参阅属性接口)包含元素的属性。传递给attrs的对象可以被解析器重用;保持对它的引用并不是保存属性副本的可靠方法。要保留属性的副本,请使用copy()
对象的attrs方法.
ContentHandler.
endElement
(name)-
在非命名空间模式下表示元素的结尾.
name参数包含元素类型的名称,就像
startElement()
event.
ContentHandler.
startElementNS
(name, qname, attrs)-
在命名空间模式中查找元素的开头时
name参数包含元素类型的名称
(uri,localname)
元组,qname参数包含源文档中使用的原始XML 1.0名称,以及attrs参数包含AttributesNS
接口的实例(参见属性NS接口),其中包含元素的属性。如果没有与该元素关联的命名空间,uri的name组件将是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而不是使用旧的offset和length参数来覆盖内容.
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_ges
和feature_external_pes
properties.
DTDHandler Objects
DTDHandler
实例提供了以下方法:
DTDHandler.
notationDecl
(name, publicId, systemId)-
办理符号声明活动.
DTDHandler.
unparsedEntityDecl
(name, publicId, systemId, ndata )-
处理未解析的实体声明事件.
EntityResolver Objects
EntityResolver.
resolveEntity
(publicId, systemId)-
解析实体的系统标识符,并返回systemidentifier以作为字符串读取,或返回要读取的InputSource。defaultimplementation返回systemId.
ErrorHandler对象
具有此接口的对象用于从XMLReader
接收错误和警告信息。如果您创建一个对象来实现此接口,然后使用您的XMLReader
注册该对象,解析器将调用您对象中的方法来报告所有警告和错误。有三种级别的错误:警告,(可能)可恢复的错误和不可恢复的错误。所有方法都以SAXParseException
为唯一参数。通过提高传入的异常对象可以将错误和警告转换为异常.
ErrorHandler.
error
(exception)-
解析器遇到可恢复的错误时调用。如果此方法未引发异常,则解析可能会继续,但应用程序不应期望进一步的文档信息。允许解析器继续运行可能会在输入文档中发现其他错误.
ErrorHandler.
fatalError
(exception)-
当解析器遇到错误时无法恢复;当这个方法返回时,解析会被终止.
ErrorHandler.
warning
(exception)-
当解析器向应用程序提供次要警告信息时调用。当此方法返回时,预计会继续解析,文档信息将继续传递给应用程序。在此方法中引发异常将导致解析结束