1 import xml.sax 2 import sys 3 import re 4 5 write = sys.stdout.write 6 write_err = sys.stderr.write 7 8 class tree (xml.sax.handler.ContentHandler): 9 """ Klasa tree dziedziczy po klasie ContentHandler 10 i jest odpowiedzialna za obsluge zdarzen generowanych 11 przez parser. """ 12 13 def __init__ (self): 14 self.depth = 1 15 16 def startDocument (self): 17 write ("Poczatek dokumentu\n") 18 19 def endDocument (self): 20 write (' |\n |\n') 21 write ("Koniec dokumentu\n") 22 23 def startElement (self, name, attrs): 24 #for i in range (2): 25 for i in range (self.depth): 26 write (' |') 27 write ('\n') 28 for i in range (self.depth)[0:-1]: 29 write (' |') 30 write (' +----' + name) 31 if len (attrs) > 0: 32 write (" (") 33 for (name, value) in attrs.items (): 34 write (name + "=" + value + ", ") 35 write ("\b\b)\n") 36 else: 37 write ("\n") 38 self.depth = self.depth + 1 39 40 def endElement (self, name): 41 self.depth = self.depth - 1 42 43 def characters (self, conntent): 44 if re.match ('^\s+$', conntent): return 45 for i in range (self.depth)[0:-1]: 46 write (' |') 47 write (' ("' + conntent + '")\n') 48 49 # Poczatek programu: 50 51 if len (sys.argv) == 2: 52 write ("Przetwarzanie pliku: " + sys.argv[1] + "\n") 53 else: 54 write_err ("Nalezy podac nazwe pliku XML jako argument.\n") 55 sys.exit (1) 56 57 parser = xml.sax.make_parser () 58 parser.setContentHandler ( tree() ) 59 try: 60 parser.parse ( sys.argv[1] ) 61 except xml.sax.SAXException, msg: 62 write_err ( str( msg ) + "\n" ) 63 except IOError: 64 write_err ( "Brak pliku.\n" )