from xml.sax.handler import ContentHandler
import sys
class CompactHandler(ContentHandler):
def __init__(self):
self.closed = False
self.indent = 0
self.lastNodeWasText = False
def startElement(self, localname, attrs):
if self.closed:
sys.stdout.write('\n'+self.indent*" ")
self.closed = False
self.indent+=1+len(localname)
sys.stdout.write(localname+'[')
first = True
for name in attrs.getNames():
if not first:
sys.stdout.write('\n'+self.indent*" ")
first = False
sys.stdout.write('@'+name+'['+attrs.getValue(name)+']')
self.closed = True
self.lastNodeWasText = False
def endElement(self, localname):
self.closed = True
sys.stdout.write(']')
self.indent -= 1+len(localname)
self.lastNodeWasText = False
def characters(self, data):
data = data.strip()
if(len(data)>0):
if self.closed and not self.lastNodeWasText:
sys.stdout.write('\n'+self.indent*" ")
self.closed = False
sys.stdout.write(data)
self.closed=True
self.lastNodeWasText = True