/Demo/xml/elem_count.py

http://unladen-swallow.googlecode.com/ · Python · 36 lines · 26 code · 10 blank · 0 comment · 3 complexity · 2db5bb3c32e2e01981f380ae0b3063a8 MD5 · raw file

  1. import sys
  2. from xml.sax import make_parser, handler
  3. class FancyCounter(handler.ContentHandler):
  4. def __init__(self):
  5. self._elems = 0
  6. self._attrs = 0
  7. self._elem_types = {}
  8. self._attr_types = {}
  9. def startElement(self, name, attrs):
  10. self._elems = self._elems + 1
  11. self._attrs = self._attrs + len(attrs)
  12. self._elem_types[name] = self._elem_types.get(name, 0) + 1
  13. for name in attrs.keys():
  14. self._attr_types[name] = self._attr_types.get(name, 0) + 1
  15. def endDocument(self):
  16. print "There were", self._elems, "elements."
  17. print "There were", self._attrs, "attributes."
  18. print "---ELEMENT TYPES"
  19. for pair in self._elem_types.items():
  20. print "%20s %d" % pair
  21. print "---ATTRIBUTE TYPES"
  22. for pair in self._attr_types.items():
  23. print "%20s %d" % pair
  24. parser = make_parser()
  25. parser.setContentHandler(FancyCounter())
  26. parser.parse(sys.argv[1])