ElementTree iterparse strategy
This video explains
ElementTree iterparse strategy
--
Become part of the top 3% of the developers by applying to Toptal
https://topt.al/25cXVn
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Horror Game Menu Looping
--
Chapters
00:00 Question
02:39 Accepted answer (Score 34)
03:02 Answer 2 (Score 16)
03:42 Thank you
--
Full question
https://stackoverflow.com/questions/1279...
Question links:
[iterparse()]: http://effbot.org/zone/element-iterparse...
Answer 1 links:
[pulldom]: http://docs.python.org/py3k/library/xml....
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #xml #sax #elementtree #iterparse
#avk47
ElementTree iterparse strategy
--
Become part of the top 3% of the developers by applying to Toptal
https://topt.al/25cXVn
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Horror Game Menu Looping
--
Chapters
00:00 Question
02:39 Accepted answer (Score 34)
03:02 Answer 2 (Score 16)
03:42 Thank you
--
Full question
https://stackoverflow.com/questions/1279...
Question links:
[iterparse()]: http://effbot.org/zone/element-iterparse...
Answer 1 links:
[pulldom]: http://docs.python.org/py3k/library/xml....
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #xml #sax #elementtree #iterparse
#avk47
ACCEPTED ANSWER
Score 35
Here's one possible approach: we maintain a path list and peek backwards to find the parent node(s).
path = []
for event, elem in ET.iterparse(file_path, events=("start", "end")):
if event == 'start':
path.append(elem.tag)
elif event == 'end':
# process the tag
if elem.tag == 'name':
if 'members' in path:
print 'member'
else:
print 'nonmember'
path.pop()
ANSWER 2
Score 17
pulldom is excellent for this. You get a sax stream. You can iterate through the stream, and when you find a node that your are interested in, load that node in to a dom fragment.
import xml.dom.pulldom as pulldom
import xpath # from http://code.google.com/p/py-dom-xpath/
events = pulldom.parse('families.xml')
for event, node in events:
if event == 'START_ELEMENT' and node.tagName=='family':
events.expandNode(node) # node now contains a dom fragment
family_name = xpath.findvalue('name', node)
members = xpath.findvalues('members/name', node)
print('family name: {0}, members: {1}'.format(family_name, members))
output:
family name: Simpson, members: [u'Hommer', u'Marge', u'Bart']
family name: Griffin, members: [u'Peter', u'Brian', u'Meg']