You are here:  Home » Python » – XML解析器接口 – 结构化标记处理工具(Python教程)(参考资料)

xml.sax.xmlreaderXML解析器接口

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


SAX解析器实现XMLReader接口。它们是在Python模块中实现的,它必须提供一个函数create_parser()。这个函数由xml.sax.make_parser()调用,没有创建新解析器对象的参数.

class xml.sax.xmlreader.XMLReader

可以由SAX解析器继承的基类.

class xml.sax.xmlreader.IncrementalParser

在某些情况下,最好不要一次解析输入源,但在文档可用时对其进行补偿。请注意,阅读器通常不会读取整个文件,但也会以块的形式读取;在整个文档处理之前,parse()将不会返回。因此,如果不需要parse()的阻塞行为,则应该使用这些接口.

当解析器被实例化时,它已准备好立即开始接受来自forfeed方法的数据。解析完成后,调用closethe reset方法必须调用,使解析器准备接受来自feed或使用parse方法的新数据.

注意这些方法必须not在解析过程中调用,也就是调用afterparse并在它返回之前调用

默认情况下,该类还使用IncrementalParser接口的feed,close和reset方法实现XMLReader接口的parse方法,以方便SAX 2.0驱动程序编写者.

class xml.sax.xmlreader.Locator

用于将SAX事件与文档位置相关联的接口。定位器对象只会在调用DocumentHandler方法时返回有效结果;在任何时候,结果都是不可预测的。如果没有相关信息,方法可能会返回None.

class xml.sax.xmlreader.InputSourcesystem_id=None

XMLReader所需信息封装到readentities.

该类可以包括有关公共标识符,systemidentifier,字节流(可能带有字符编码信息)和/或实体的字符流的信息.

应用程序将创建此类的对象,以便在XMLReader.parse()方法中使用,并返回fromEntityResolver.resolveEntity。

InputSource属于应用程序,XMLReader不允许修改InputSource从应用程序传递给它的对象,虽然它可以复制和修改它们.

class xml.sax.xmlreader.AttributesImpl (attrs

这是Attributes接口的实现(参见属性接口)。这是一个类似字典的对象,它表示startElement()调用中的元素属性。除了最有用的字典操作之外,它还支持接口描述的许多其他方法。这类对象应该由读者来实现;attrs必须是一个类似字典的对象,包含从属性名到属性值的映射.

class xml.sax.xmlreader.AttributesNSImpl (attrs, qnames)

Namespace-aware变种AttributesImpl,将传递给startElementNS()。它来自AttributesImpl,但是将属性名称理解为namespaceURIlocalname的两元组。此外,它提供了许多期望在原始文档中出现的限定名称的方法。这个类实现了AttributesNS接口(参见AttributesNS接口).

XMLReader对象

XMLReader接口支持以下方法:

XMLReader.parsesource

处理输入源,生成SAX事件。source对象可以是系统标识符(标识输入源的字符串 – 通常是文件名或URL),类文件对象或InputSource对象。当parse()返回时,输入被完全处理,解析器对象可以被丢弃或重置.

在版本3.5中更改:添加了对字符流的支持.

XMLReader.getContentHandler

返回当前的ContentHandler.

XMLReader.setContentHandlerhandler

设置当前的ContentHandler。如果没有设置ContentHandler,内容事件将被搁置.

XMLReader.getDTDHandler ()

返回当前DTDHandler.

XMLReader.setDTDHandlerhandler

设置当前的DTDHandler。如果没有设置DTDHandler,DTDevents将被丢弃.

XMLReader.getEntityResolver ()

返回当前EntityResolver.

XMLReader.setEntityResolverhandler

设置当前的EntityResolver。如果不EntityResolver设置,尝试解析外部实体将导致打开实体的systemidentifier,如果不可用则失败.

XMLReader.getErrorHandler()

返回当前ErrorHandler.

XMLReader.setErrorHandlerhandler

设置当前错误处理程序。如果没有设置ErrorHandler,则会出现异常错误,并打印警告.

XMLReader.setLocale (locale )

允许应用程序设置错误和警告的区域设置

SAX解析器不需要提供错误和警告的本地化;但是,如果它们不支持所请求的语言环境,则必须引发SAXexception。应用程序可能会在解析中请求区域设置更改

XMLReader.getFeaturefeaturename

返回功能featurename的当前设置。如果无法识别该功能,则会引发SAXNotRecognizedException。模块中列出了众所周知的功能名称xml.sax.handler.

XMLReader.setFeaturefeaturename, value

设置featurenamevalue。如果无法识别该功能,则会引发SAXNotRecognizedException。如果解析器不支持该功能或其设置,则SAXNotSupportedException被抬起.

XMLReader.getProperty (propertyname )

返回属性propertyname的当前设置。如果属性未被识别,则引发SAXNotRecognizedException。模块中列出了众所周知的属性名称xml.sax.handler.

XMLReader.setPropertypropertyname, value

propertyname设置为value。如果无法识别该属性,则会引发SAXNotRecognizedException。如果解析器不支持该属性或其设置,则SAXNotSupportedException被提升.

IncrementalParser Objects

IncrementalParser提供以下附加方法:

IncrementalParser.feeddata

处理一大堆data.

IncrementalParser.close

假设文档结束。这将检查只能在最后检查的良好状态条件,调用处理程序,并可能清理解析期间分配的资源.

IncrementalParser.reset ( )

调用close后调用此方法以重置解析器,以便它可以解析新文档。在没有调用reset的情况下调用parse或feed afterclose的结果是未定义的.

定位器对象

Locator的实例提供以下方法:

Locator.getColumnNumber

返回当前事件开始的列号。

Locator.getLineNumber

返回当前事件开始的行号.

Locator.getPublicId()

返回当前事件的公共标识符.

Locator.getSystemId (

返回当前事件的系统标识符.

InputSource Objects

InputSource.setPublicIdid

设置此InputSource.

InputSource.getPublicId)的公共标识符

返回这个的公共标识符InputSource.

InputSource.setSystemIdid

设置InputSource.

InputSource.getSystemId的系统标识符(

返回此InputSource.

InputSource.setEncodingencoding)的系统标识符

设置此InputSource.

编码必须是XML编码声明可接受的字符串(参见XML建议的第4.3.3节).

如果InputSourceInputSource还包含一个字符流.

InputSource.getEncoding (

获取此InputSource的字符编码.

InputSource.setByteStream (bytefile )

为此输入源设置字节流(二进制文件).

如果还指定了字符流,SAX解析器将忽略它,但它将优先使用字节流来打开URI连接本身.

如果应用程序知道字节流的字符编码,则应使用setEncoding方法设置它.

InputSource.getByteStream ()

获取此输入源的字节流.

getEncoding方法将返回此字节流的字符编码,或None如果不知道的话

InputSource.setCharacterStreamcharfile

设置字符流(文本文件)对于这个输入源.

如果指定了字符流,SAX解析器将忽略任何字节流,并且不会尝试打开与系统标识符的URI连接.

InputSource.getCharacterStream ( )

获取此输入源的字符流.

Attributes接口

Attributes对象实现映射协议的一部分,包括方法copy(),get(), __contains__(),items(), keys()values()。还提供了以下方法:

Attributes.getLength

返回属性数量.

Attributes.getNames()

返回属性的名称.

Attributes.getType (name )

返回属性的类型name,通常是"CDATA".

Attributes.getValuename

返回属性的值name.

AttributesNS接口

这个接口是Attributes界面(参见属性界面)。该接口支持的所有方法也可以在AttributesNS objects.

上使用。还可以使用以下方法:

AttributesNS.getValueByQNamename

返回合格名称的值.

AttributesNS.getNameByQName (name)

返回(namespace, localname)对合格name.

AttributesNS.getQNameByNamename

返回(namespace, localname)对的限定名称

AttributesNS.getQNames// ()

返回所有属性的限定名称.

评论被关闭。