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()
返回所有属性的限定名称。