在线文档教程

xml.sax.xmlreader

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

2.0版本中的新功能。

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

class xml.sax.xmlreader.XMLReader

可由SAX解析器继承的基类。

class xml.sax.xmlreader.IncrementalParser

在某些情况下,最好不要一次解析输入源,而是在文档可用时向其提供大块文件。 请注意,读者通常不会读取整个文件,而是以块读取; 仍然解析()将不会返回,直到整个文档被处理。 因此,如果parse()的阻塞行为不可取,则应使用这些接口。

当解析器被实例化时,它已经准备好立即开始接收来自feed方法的数据。解析完成后,通过调用关闭重置方法,必须调用解析器以使分析器准备好接收新数据,无论是从feed还是使用parse方法。

请注意,在解析期间不得 调用这些方法,即在调用parse之后并返回原本的内容。

默认情况下,为了方便SAX 2.0驱动程序编写器,类还使用IncrementalParser接口的feed,close和reset方法实现XMLReader接口的解析方法。

class xml.sax.xmlreader.Locator

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

class xml.sax.xmlreader.InputSource([systemId])

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

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

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

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

class xml.sax.xmlreader.AttributesImpl(attrs)

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

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

AttributesImpl的名称空间感知变体,将被传递给startElementNS()。 它从AttributesImpl派生,但将属性名称理解为namespaceURI和localname的二元组。 另外,它提供了许多预期在原始文档中出现的合格名称的方法。 该类实现AttributesNS接口(请参见AttributesNS接口一节)。

1. XMLReader对象

XMLReader接口支持以下方法:

XMLReader.parse(source)

处理输入源,产生SAX事件。 源对象可以是系统标识符(标识输入源的字符串 - 通常是文件名或URL),文件类对象或InputSource对象。 当parse()返回时,输入被完全处理,解析器对象可以被丢弃或重置。 作为一个限制,当前的实现只接受字节流; 字符流的处理有待进一步研究。

XMLReader.getContentHandler()

返回当前ContentHandler

XMLReader.setContentHandler(handler)

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

XMLReader.getDTDHandler()

返回当前DTDHandler

XMLReader.setDTDHandler(handler)

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

XMLReader.getEntityResolver()

返回当前EntityResolver

XMLReader.setEntityResolver(handler)

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

XMLReader.getErrorHandler()

返回当前ErrorHandler

XMLReader.setErrorHandler(handler)

设置当前的错误处理程序。如果ErrorHandler设置为“ 否” ,则将引发错误作为例外,并打印警告。

XMLReader.setLocale(locale)

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

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

XMLReader.getFeature(featurename)

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

XMLReader.setFeature(featurename, value)

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

XMLReader.getProperty(propertyname)

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

XMLReader.setProperty(propertyname, value)

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

2. IncrementalParser对象

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

IncrementalParser.feed(data)

处理大量数据

IncrementalParser.close()

假设文档结束。这将检查只能在最后检查的格式良好条件,调用处理程序,并可以清理在分析过程中分配的资源。

IncrementalParser.reset()

调用close之后调用此方法来重置解析器,以便它可以解析新文档。调用解析或关闭后调用结果而不调用重置是未定义的。

3.定位器对象

Locator提供这些方法的实例:

Locator.getColumnNumber()

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

Locator.getLineNumber()

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

Locator.getPublicId()

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

Locator.getSystemId()

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

4. InputSource对象

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的encoding属性将被忽略。

InputSource.getEncoding()

获取此InputSource的字符编码。

InputSource.setByteStream(bytefile)

为此输入源设置字节流(一种不执行字节到字符转换的Python文件类对象)。

如果还有指定的字符流,则SAX解析器将忽略此操作,但它将使用字节流来优先打开URI连接本身。

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

InputSource.getByteStream()

获取该输入源的字节流。

getEncoding方法将返回此字节流的字符编码,或者None未知。

InputSource.setCharacterStream(charfile)

为此输入源设置字符流。(流必须是一个Python 1.6 Unicode包装的文件,就像执行Unicode字符串转换一样。)

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

InputSource.getCharacterStream()

获取此输入源的字符流。

5. Attributes界面

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

Attributes.getLength()

返回属性的数量。

Attributes.getNames()

返回属性的名称。

Attributes.getType(name)

返回属性名称的类型,通常是'CDATA'

Attributes.getValue(name)

返回属性名称的值。

6. AttributesNS界面

该接口是属性接口的子类型(请参见属性接口一节)。 AttributesNS对象也提供该接口支持的所有方法。

以下方法也可用:

AttributesNS.getValueByQName(name)

返回合格名称的值。

AttributesNS.getNameByQName(name)

返回(名称空间,本地名称)对的合格名称。

AttributesNS.getQNameByName(name)

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

AttributesNS.getQNames()

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