elementtree
接口lxml
也提供支持 - 例如可以用Python 2.7内置的元素树:
>>> from xml.etree import ElementTree as et
>>> x='''<div>
... text1
... <div>
... t1
... </div>
... text2
... <div>
... t2
... </div>
... text3
... </div>'''
>>> t=et.fromstring(x)
>>> for el in t.iter():
... print '%s: %r, %r' % (el.tag, el.text, el.tail)
...
div: '\ntext1\n', None
div: '\n t1\n', '\ntext2\n'
div: '\n t2\n', '\ntext3\n'
根据您的LXML/ElementTree的版本,您可能需要拼iterator方法.getiterator()
而不是.iter()
。
如果你需要一个单独的发电机会产生标签和文字的目的,例如:
def elements_and_texts(t):
for el in t.iter():
yield 'tag', el.tag
if el.text is not None:
yield 'text', el.text
if el.tail is not None:
yield 'tail', el.tail
这基本上消除了None
S和产生两元组的'tag'
第一项,'text'
,或'tail'
,帮助你区分。我想这不是你理想的格式,但不应该很难将它变成你喜欢的东西;-)。