mirror of
https://github.com/python/cpython.git
synced 2024-12-01 22:04:04 +08:00
bc470d5023
svn+ssh://pythondev@svn.python.org/python/trunk ........ r75358 | georg.brandl | 2009-10-11 17:06:44 +0200 (So, 11 Okt 2009) | 1 line Overhaul of Demo/xml. ........
43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
"""
|
|
A simple demo that reads in an XML document and displays the number of
|
|
elements and attributes as well as a tally of elements and attributes by name.
|
|
"""
|
|
|
|
import sys
|
|
from collections import defaultdict
|
|
|
|
from xml.sax import make_parser, handler
|
|
|
|
class FancyCounter(handler.ContentHandler):
|
|
|
|
def __init__(self):
|
|
self._elems = 0
|
|
self._attrs = 0
|
|
self._elem_types = defaultdict(int)
|
|
self._attr_types = defaultdict(int)
|
|
|
|
def startElement(self, name, attrs):
|
|
self._elems += 1
|
|
self._attrs += len(attrs)
|
|
self._elem_types[name] += 1
|
|
|
|
for name in attrs.keys():
|
|
self._attr_types[name] += 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)
|
|
|
|
if __name__ == '__main__':
|
|
parser = make_parser()
|
|
parser.setContentHandler(FancyCounter())
|
|
parser.parse(sys.argv[1])
|