from xml.parsers.xmlproc import xmlproc import sys class DTDParser(xmlproc.DTDConsumer): def new_element_type(self, name, cont): type = None if cont == 'EMPTY': type = 'EMPTY' else: for e in map(lambda x: x[0], cont[1]): if e == '#PCDATA': type = e else: print "\"%s\" -> \"%s\";" % (name, e) if type != None: print "\"%s\" [label=\"%s\\n(%s)\"];" % (name, name, type) if __name__ == '__main__': t = xmlproc.DTDParser() t.set_dtd_consumer(DTDParser(t)) print "digraph \"%s\" {" % sys.argv[1] t.parse_resource(sys.argv[1]) print "}"