20.12. xml.sax.xmlreader - XML解析器的接口

源代码: 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()的阻塞行为,则应使用这些接口。

当解析器被实例化时,它准备好立即开始从feed方法接受数据。解析完成后,调用关闭reset方法必须被调用以使解析器准备接受新数据,从feed或使用parse方法。

请注意,这些方法必须在解析期间调用,而不是,也就是说,在解析被调用之后,在返回之前。

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

class xml.sax.xmlreader.Locator

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

class xml.sax.xmlreader.InputSource(system_id=None)

封装XMLReader读取实体所需的信息。

该类可以包括关于公共标识符,系统标识符,字节流(可能具有字符编码信息)和/或实体的字符流的信息。

应用程序将创建此类的对象以用于XMLReader.parse()方法和从EntityResolver.resolveEntity返回。

InputSource属于应用程序,XMLReader不允许修改从应用程序传递给它的InputSource对象,修改这些。

class xml.sax.xmlreader.AttributesImpl(attrs)

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

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

知道AttributesImpl的命名空间变量,将传递到startElementNS()它源自AttributesImpl,但将属性名称理解为namespaceURIlocalname的两元组。此外,它提供了一些方法,期望在原始文档中出现的限定名称。此类实现AttributesNS接口(参见The AttributesNS Interface一节)。

20.12.1. XMLReader Objects

XMLReader接口支持以下方法:

XMLReader.parse(source)

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

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

XMLReader.getContentHandler()

返回当前ContentHandler

XMLReader.setContentHandler(handler)

设置当前ContentHandler如果未设置ContentHandler,内容事件将被丢弃。

XMLReader.getDTDHandler()

返回当前DTDHandler

XMLReader.setDTDHandler(handler)

设置当前DTDHandler如果未设置DTDHandler,则DTD事件将被丢弃。

XMLReader.getEntityResolver()

返回当前EntityResolver

XMLReader.setEntityResolver(handler)

设置当前EntityResolver如果未设置EntityResolver,则尝试解析外部实体将导致打开实体的系统标识符,如果不可用,则会失败。

XMLReader.getErrorHandler()

返回当前的ErrorHandler

XMLReader.setErrorHandler(handler)

设置当前错误处理程序。如果未设置ErrorHandler,则错误将作为异常引发,并将打印警告。

XMLReader.setLocale(locale)

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

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

XMLReader.getFeature(featurename)

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

XMLReader.setFeature(featurename, value)

featurename设置为如果该功能未被识别,则会引发SAXNotRecognizedException如果解析器不支持该功能或其设置,则会引发SAXNotSupportedException

XMLReader.getProperty(propertyname)

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

XMLReader.setProperty(propertyname, value)

属性名设置为如果该属性未被识别,则会引发SAXNotRecognizedException如果解析器不支持属性或其设置,则会引发SAXNotSupportedException

20.12.2. IncrementalParser Objects

IncrementalParser的实例提供以下附加方法:

IncrementalParser.feed(data)

处理一小块数据

IncrementalParser.close()

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

IncrementalParser.reset()

此方法在调用close之后调用以重置解析器,以便它可以解析新文档。关闭后调用解析或feed的结果未调用reset将被定义。

20.12.3. Locator Objects

Locator的实例提供以下方法:

Locator.getColumnNumber()

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

Locator.getLineNumber()

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

Locator.getPublicId()

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

Locator.getSystemId()

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

20.12.4. InputSource Objects

InputSource.setPublicId(id)

设置此InputSource的公共标识符。

InputSource.getPublicId()

返回此InputSource的公共标识符。

InputSource.setSystemId(id)

设置此InputSource的系统标识符。

InputSource.getSystemId()

返回此InputSource的系统标识符。

InputSource.setEncoding(encoding)

设置此InputSource的字符编码。

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

如果InputSource还包含字符流,则会忽略InputSource的编码属性。

InputSource.getEncoding()

获取此InputSource的字符编码。

InputSource.setByteStream(bytefile)

为此输入源设置字节流(binary file)。

如果还有一个字符流被指定,SAX解析器将忽略它,但它将使用一个字节流优先于打开一个URI连接本身。

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

InputSource.getByteStream()

获取此输入源的字节流。

getEncoding方法将返回此字节流的字符编码,如果未知,则返回None。

InputSource.setCharacterStream(charfile)

设置此输入源的字符流(text file)。

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

InputSource.getCharacterStream()

获取此输入源的字符流。

20.12.5. The Attributes Interface

Attributes objects implement a portion of the mapping protocol, including the methods copy(), get(), __contains__(), items(), keys(), and values(). 还提供以下方法:

Attributes.getLength()

返回属性的数量。

Attributes.getNames()

返回属性的名称。

Attributes.getType(name)

返回属性name的类型,通常为'CDATA'

Attributes.getValue(name)

返回属性name的值。

20.12.6. The AttributesNS Interface

此接口是Attributes接口的子类型(请参见The Attributes Interface一节)。该接口支持的所有方法也可在AttributesNS对象上使用。

还有以下方法:

AttributesNS.getValueByQName(name)

返回限定名称的值。

AttributesNS.getNameByQName(name)

返回符合条件的名称(命名空间, 本地名称)

AttributesNS.getQNameByName(name)

返回(命名空间, 本地名称)对的限定名称。

AttributesNS.getQNames()

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