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方法以使分析器准备好接受来自提要或使用Parse方法的新数据。

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

默认情况下,该类还使用incrementalParser接口的feed、close和reset方法实现xmlReader接口的解析方法,以方便SAX2.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 接口(见章节 这个 Attributes 界面 )这是一个类似字典的对象,它表示 startElement() 调用。除了最有用的字典操作之外,它还支持接口所描述的许多其他方法。这个类的对象应该由读者实例化; 阿特斯 必须是类似字典的对象,包含从属性名到属性值的映射。

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

命名空间感知变量 AttributesImpl ,将传递给 startElementNS() . 它来源于 AttributesImpl ,但将属性名理解为 命名空间地名 . 此外,它还提供了许多方法,这些方法希望在原始文档中出现限定名。此类实现 AttributesNS 接口(见章节 这个 AttributesNS 界面

XmlReader对象

这个 XMLReader 接口支持以下方法:

XMLReader.parse(source)

处理输入源,生成SAX事件。这个 来源 对象可以是系统标识符(标识输入源的字符串——通常是文件名或URL),也可以是 pathlib.Pathpath-like 对象,或 InputSource 对象。什么时候? parse() 返回,输入被完全处理,解析器对象可以被丢弃或重置。

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

在 3.8 版更改: 添加了对类似路径的对象的支持。

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)

返回功能的当前设置 特征名 . 如果无法识别该功能, SAXNotRecognizedException 提高了。模块中列出了著名的功能名称 xml.sax.handler .

XMLReader.setFeature(featurename, value)

设置 特征名value . 如果无法识别该功能, SAXNotRecognizedException 提高了。如果分析程序不支持该功能或其设置, SAXNotSupportedException 提高了。

XMLReader.getProperty(propertyname)

返回属性的当前设置 属性名 . 如果不识别该属性,则 SAXNotRecognizedException 提高了。模块中列出了已知的属性名 xml.sax.handler .

XMLReader.setProperty(propertyname, value)

设置 属性名value . 如果不承认该属性, SAXNotRecognizedException 提高了。如果分析器不支持该属性或其设置, SAXNotSupportedException 提高了。

IncrementalParser对象

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

IncrementalParser.feed(data)

处理 data .

IncrementalParser.close()

假设文档结束。这将检查格式良好的条件,这些条件只能在末尾进行检查,调用处理程序,并可能清理解析期间分配的资源。

IncrementalParser.reset()

调用Close后调用此方法以重置分析器,以便准备分析新文档。关闭后调用parse或feed而不调用reset的结果未定义。

定位对象

实例 Locator 提供以下方法:

Locator.getColumnNumber()

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

Locator.getLineNumber()

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

Locator.getPublicId()

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

Locator.getSystemId()

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

输入源对象

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.setByteStream(bytefile)

设置字节流(A binary file )对于此输入源。

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

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

InputSource.getByteStream()

获取此输入源的字节流。

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

InputSource.setCharacterStream(charfile)

设置字符流(A text file )对于此输入源。

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

InputSource.getCharacterStream()

获取此输入源的字符流。

这个 Attributes 界面

Attributes 对象实现 mapping protocol 包括方法 copy()get()__contains__()items()keys()values() . 还提供了以下方法:

Attributes.getLength()

返回属性数。

Attributes.getNames()

返回属性的名称。

Attributes.getType(name)

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

Attributes.getValue(name)

返回属性值 name .

这个 AttributesNS 界面

此接口是 Attributes 接口(见章节 这个 Attributes 界面 )该接口支持的所有方法也可用于 AttributesNS 物体。

还提供以下方法:

AttributesNS.getValueByQName(name)

返回限定名的值。

AttributesNS.getNameByQName(name)

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

AttributesNS.getQNameByName(name)

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

AttributesNS.getQNames()

返回所有属性的限定名。