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" )