#!/usr/bin/python import sys from xml.sax import saxutils, handler, make_parser class TagGenerator ( handler.ContentHandler ): def __init__ ( self, out = sys.stdout, xmlns = None ): handler.ContentHandler.__init__ ( self ) self._out = out self.tags = [ ] self.xmlns = xmlns def startDocument ( self ): self._out.write ( '\n'.join ( [ '# automatically generated by ns2breve\n', 'from breve.tags import Proto\n\n' ] ) ) def startElement ( self, name, attrs ): if name in ( 'xsd:element', 'xs:element' ): el = attrs.get ( 'name', None ) if el: self.tags.append ( el ) def endDocument ( self ): self.tags.sort ( ) if self.xmlns: self._out.write ( '\n'.join ( [ 'xmlns = "%s"' % self.xmlns, 'doctype = ""\n' ] ) ) self._out.write ( '\n'.join ( [ 'tag_names = [ "%s" ]' % '", "'.join ( set ( self.tags ) ), 'tags = { }', 'for t in tag_names:', ' tags [ t ] = Proto ( t )\n\n' ] ) ) if __name__ == '__main__': try: url = sys.argv [ 1 ] except IndexError: print "\nUsage: %s " % sys.argv [ 0 ] print " e.g. %s %s\n" % ( sys.argv [ 0 ], 'http://www.google.com/schemas/sitemap/0.84/sitemap.xsd' ) else: parser = make_parser ( ) parser.setContentHandler ( TagGenerator ( xmlns = url ) ) parser.parse ( url )