有没有办法使用 lxml iterparse 跳过一个元素而不检查标签?以这个 xml 为例:
<root>
<sample>
<tag1>text1</tag1>
<tag2>text2</tag2>
<tag3>text3</tag3>
<tag4>text4</tag4>
</sample>
<sample>
<tag1>text1</tag1>
<tag2>text2</tag2>
<tag3>text3</tag3>
<tag4>text4</tag4>
</sample>
</root>
如果我关心tag1
and tag4
,检查tag2
andtag3
会吃掉一些时间。如果文件不大,那并不重要,但如果我有一百万<sample>
个节点,如果我不必检查tag2
nd ,我可以减少一些搜索时间tag3
。他们总是在那里,我从不需要他们。
在 lxml 中使用 iterparse
import lxml
xmlfile = 'myfile.xml'
context = etree.iterparse(xmlfile, events('end',), tag='sample')
for event, elem in context:
for child in elem:
if child.tag == 'tag1'
my_list.append(child.text)
#HERE I'd like to advance the loop twice without checking tag2 and tag3 at all
#something like:
#next(child)
#next(child)
elif child.tag == 'tag4'
my_list.append(child.text)