fork download
  1. #!/usr/bin/env python
  2. import re
  3. import sys
  4. import xml.etree.cElementTree as etree
  5.  
  6. def getelements(source, tag):
  7. context = iter(etree.iterparse(source, events=('start', 'end')))
  8. _, root = next(context) # get root element
  9. for event, elem in context:
  10. if event == 'end' and elem.tag == tag:
  11. yield elem
  12. root.clear() # free memory
  13.  
  14. for elem in getelements(sys.stdin, 'person'):
  15. print '^'.join(re.sub(r'\s+', ' ', elem.find(tag).text).strip() for tag in 'name age address'.split())
Success #stdin #stdout 0.07s 7072KB
stdin
<data>
  <person>
        <name>Tom</name>
        <age>18</age>
        <address> London, xxx street, xxx building</address>
  </person>
  <person>
        <name>John</name>
        <age>22</age>
        <address> Canberra, xxx street, xxx building, xxx floor, xxx room,
                 xxx  bed</address>
  </person>
</data>
stdout
Tom^18^London, xxx street, xxx building
John^22^Canberra, xxx street, xxx building, xxx floor, xxx room, xxx bed