解析器对象:lxml.etree在默认情况下使用带默认配置的标准解析器,如果想配置解析器,可以创建自己的实例。
>>> parser = etree.XMLParser(remove_blank_text=True) # lxml.etree only!
本例在解析的时候创建了一个移除tags之间的空的文本的解析器,这可以减少tree的大小以及避免不定的tail,如果你知道空白内容对你来说是没有任何意义的话。
>>> root = etree.XML("
>>> etree.tostring(root)
b’
>>> for element in root.iter("*"):
... if element.text is not None and not element.text.strip():
... element.text = None
>>> etree.tostring(root)
b’
递增解析:
lxml.etree提供了两种方法来实现递增的逐步的解析。一个方法是通过类文件对象,它重复调用read() 方法。
>>> class DataSource:
... data = [ b"
... def read(self, requested_size):
... try:
... return self.data.pop(0)
... except IndexError:
... return b’’
>>> tree = etree.parse(DataSource())
>>> etree.tostring(tree)
b’
第二个方法是通过feed解析器接口,由feed(data) 和 close() 方法提供
>>> parser = etree.XMLParser()
>>> parser.feed("
>>> parser.feed("a/")
>>> parser.feed("><")
>>> parser.feed("/root>")
>>> root = parser.close()
>>> etree.tostring(root)
’
在调用close() 方法(或者当有exception发生的时候),可以通过调用feed() 方法重新使用parser:
>>> parser.feed("
>>> root = parser.close()
>>> etree.tostring(root)
b’