Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 1 | import sys |
| 2 | |
| 3 | from xml.sax import make_parser, handler |
| 4 | |
| 5 | class FancyCounter(handler.ContentHandler): |
| 6 | |
| 7 | def __init__(self): |
| 8 | self._elems = 0 |
| 9 | self._attrs = 0 |
| 10 | self._elem_types = {} |
| 11 | self._attr_types = {} |
| 12 | |
| 13 | def startElement(self, name, attrs): |
| 14 | self._elems = self._elems + 1 |
| 15 | self._attrs = self._attrs + len(attrs) |
| 16 | self._elem_types[name] = self._elem_types.get(name, 0) + 1 |
| 17 | |
Skip Montanaro | 1e8ce58 | 2007-08-06 21:07:53 +0000 | [diff] [blame^] | 18 | for name in attrs.keys(): |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 19 | self._attr_types[name] = self._attr_types.get(name, 0) + 1 |
| 20 | |
| 21 | def endDocument(self): |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 22 | print("There were", self._elems, "elements.") |
| 23 | print("There were", self._attrs, "attributes.") |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 24 | |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 25 | print("---ELEMENT TYPES") |
Skip Montanaro | 1e8ce58 | 2007-08-06 21:07:53 +0000 | [diff] [blame^] | 26 | for pair in self._elem_types.items(): |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 27 | print("%20s %d" % pair) |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 28 | |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 29 | print("---ATTRIBUTE TYPES") |
Skip Montanaro | 1e8ce58 | 2007-08-06 21:07:53 +0000 | [diff] [blame^] | 30 | for pair in self._attr_types.items(): |
Collin Winter | 6f2df4d | 2007-07-17 20:59:35 +0000 | [diff] [blame] | 31 | print("%20s %d" % pair) |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 32 | |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 33 | |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 34 | parser = make_parser() |
| 35 | parser.setContentHandler(FancyCounter()) |
| 36 | parser.parse(sys.argv[1]) |