# Very simple test - Parse a file and print what happens import sys import pyexpat import sys import os class Outputter: def __init__(self, verbose=0): self.startcount = 0 self.endcount = 0 self.cdatacount = 0 self.instcount = 0 self.verbose = verbose def startelt(self, name, attrs): self.startcount = self.startcount + 1 if self.verbose: print 'start', name for i in range(0, len(attrs), 2): print 'attr', attrs[i], attrs[i+1] def endelt(self, name): self.endcount = self.endcount + 1 if self.verbose: print 'end', name def cdata(self, data): self.cdatacount = self.cdatacount + 1 if self.verbose: print 'cdata', data def inst(self, target, data): self.instcount = self.instcount + 1 if self.verbose: print 'inst', target, data if len(sys.argv) > 1 and sys.argv[1] == '-v': out = Outputter(verbose=1) del sys.argv[1] else: out = Outputter() if len(sys.argv) != 2: if os.name == 'mac': import macfs fss, ok = macfs.StandardGetFile() if not ok: sys.exit(0) sys.argv.append(fss.as_pathname()) else: print 'Usage: pyexpattest [-v] inputfile' sys.exit(1) parser = pyexpat.ParserCreate() parser.StartElementHandler = out.startelt parser.EndElementHandler = out.endelt parser.CharacterDataHandler = out.cdata parser.ProcessingInstructionHandler = out.inst data = open(sys.argv[1]).read() rv = parser.Parse(data, 1) print 'Parser returned', rv if rv == 0: print '** Error', parser.ErrorCode print '** Line', parser.ErrorLineNumber print '** Column', parser.ErrorColumnNumber print '** Byte', parser.ErrorByteIndex print 'Summary of XML parser upcalls:' print 'start elements:', out.startcount print 'end elements:', out.endcount print 'character data:', out.cdatacount print 'processing instructions:', out.instcount