python解析xml多层⼦节点_python中⽤
ElementTree.iterpars。。。
python处理xml文件标签:
我在使⽤Python解析⽐较⼤型的xml⽂件时,为了提⾼效率,决定使⽤iterparse()⽅法,但是发现根据⽹上的例⼦:每次if event ==
‘end‘:之后elem.clear()或者是每次 if elem.tag == ‘‘:之后clear(),都只能去到当前标签的相关内容,如果想继续读取得到标签的⼦标签,则会返回为空,也就是取不到。
其实iterparse()⽅法的原理是当遇到标签的“>”符号时触发start,当遇到标签的结束标志是会触发end,⽐如:
在这个xml栗⼦中,⽤iterparse()⽅法捕捉end来获取标签,如果要获取标签,那elem先获取的是country下的标签,因为在遍历到标签的结束标志>前,先遍历到的结束标志,所以elem先获取标签的⼦标签,这类似于深度优先遍历,所以如果每次if完都clear()的话,会clear掉相应标签的⼦标签,所以得不到其⼦标签。
我尝试了各种⽅法来解决这个问题,后来通过这么写来实现的:
import ElementTree
for event, elem in ElementTree.iterparse(xml):
if event == ‘end‘:
if elem.tag == ‘name‘ and elem.find(‘children‘).get(‘name‘) == attr_name:
相应标签的操作
elem.clear()
if ....:
elem.clear()
我把clear()⽅法放在了if⾥⾯,这样只有在到相应标签并且读取完其⼦标签后再clear(),这样就可以读取⼦标签以及多层节点了。
功能是实现了,但是不知道其效率有没有影响,本⼈菜鸟刚接触Python,还望⼤⽜们指点。
标签:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。