/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
- import sys
- from xml.sax import make_parser, handler
- class FancyCounter(handler.ContentHandler):
- def __init__(self):
- self._elems = 0
- self._attrs = 0
- self._elem_types = {}
- self._attr_types = {}
- def startElement(self, name, attrs):
- self._elems = self._elems + 1
- self._attrs = self._attrs + len(attrs)
- self._elem_types[name] = self._elem_types.get(name, 0) + 1
- for name in attrs.keys():
- self._attr_types[name] = self._attr_types.get(name, 0) + 1
- def endDocument(self):
- print "There were", self._elems, "elements."
- print "There were", self._attrs, "attributes."
- print "---ELEMENT TYPES"
- for pair in self._elem_types.items():
- print "%20s %d" % pair
- print "---ATTRIBUTE TYPES"
- for pair in self._attr_types.items():
- print "%20s %d" % pair
- parser = make_parser()
- parser.setContentHandler(FancyCounter())
- parser.parse(sys.argv[1])