from xml.sax import handler, make_parser
class MyHandler(handler.ContentHandler):
def __init__(self):
self.rl_value = {}
self.tmp_value = {}
self.region_value = {}
self.par_value = {}
self.img_value = {}
self.aui_value = {}
self.txt_value = {}
self.vdo_value = {}
self.ref_value = {}
self.ptime = {}
self.pvalue = []
self.rg_value = []
self.np_value = []
self.bpar = False
def startDocument(self):
pass
def endDocument(self):
pass
def startElement(self, name, attrs):
if name=="root-layout":
for name in attrs.getNames():
self.rl_value[name] = attrs.getValue(name)
elif name=="region":
for name in attrs.getNames():
self.region_value[name] = attrs.getValue(name)
elif name=="par":
self.bpar = True
for name in attrs.getNames():
self.ptime[name] = attrs.getValue(name)
elif name=="img":
for name in attrs.getNames():
self.img_value[name] = attrs.getValue(name)
if self.bpar == False:
self.parSave()
elif name=="audio":
for name in attrs.getNames():
self.aui_value[name] = attrs.getValue(name)
if self.bpar == False:
self.parSave()
elif name=="text":
for name in attrs.getNames():
self.txt_value[name] = attrs.getValue(name)
if self.bpar == False:
self.parSave()
elif name=='video':
for name in attrs.getNames():
self.vdo_value[name] = attrs.getValue(name)
if self.bpar == False:
self.parSave()
elif name=='ref':
for name in attrs.getNames():
self.ref_value[name] = attrs.getValue(name)
if self.bpar == False:
self.parSave()
def parSave(self):
pvalue = [self.ptime, self.img_value, self.aui_value, self.txt_value, self.vdo_value, self.ref_value]
self.np_value.append(pvalue)
self.img_value = {}
self.aui_value = {}
self.txt_value = {}
self.vdo_value = {}
self.ref_value = {}
self.ptime = {}
def endElement(self, name):
if name == "region":
self.rg_value.append(self.region_value)
self.region_value = {}
if name=="par":
self.bpar = False
self.parSave()
def setDocumentLocator(self, locator):
self.locator = locator
class ErrHandler(handler.ErrorHandler):
def error(self, exception):
pass
def fatalError(self, exception):
pass
def warning(self, exception):
pass
def setsmil(filename):
h = MyHandler()
parser = make_parser()
parser.setContentHandler(h)
parser.setErrorHandler(ErrHandler())
parser.parse(filename)
return h.rl_value, h.rg_value, h.np_value