# # Galeon XBEL bookmarks to plain HTML converter # # Rajarshi Guha # rajarshi@presidency.com # # 1) The converter is now a class - right now, the only useful function # to call is converter() # 2) The output HTML is nicely indented corresponding to the folders # in the original XBEL file # import xml.parsers.expat import string import sys class xbel2netscape: def __init__(self,args): self.bookmark = 0 self.title = 0 self.folder = 0 self.outf = open(args[2],'w') self.inf = open(args[1],'r') self.p = xml.parsers.expat.ParserCreate() self.p.StartElementHandler = self.start_element self.p.EndElementHandler = self.end_element self.p.CharacterDataHandler = self.char_data def start_element(self, name, attrs): if (name == "separator"): self.outf.write("
\n") if (name == "folder"): self.folder = 1 self.outf.write("

\n") if (name == "bookmark"): self.bookmark = 1 self.outf.write('

') if (name == "title"): self.title = 1 def end_element(self,name): if (name == "bookmark"): self.bookmark = 0 self.outf.write("\n") elif (name == "title"): self.title = 0 elif (name == "folder"): self.folder = 0 self.outf.write('

\n') def char_data(self, data): if (repr(data) == "'Bookmarks'"): return if(self.title and self.folder): self.outf.write('

'+ repr(data)[1:len(repr(data))-1] + '

\n') self.folder = 0 elif (self.title and not self.folder): self.outf.write(repr(data)[1:len(repr(data))-1]) def convert(self): s = '' self.outf.write('\n\n

Galeon Bookmarks

\n

') while 1: l = self.inf.readline() if not l: break s = s + l self.p.Parse(s) self.outf.write('

') self.outf.close() self.inf.close() def get_folders(self): return(self.folder_list) #------------------------------------------------- if (len(sys.argv) != 3): print "xbel2netscape" print "Usage: xbel2netscape XBEL_FILE HTML_FILE" print "XBEL_FILE - Bookmark file in XBEL format (input)" print "HTML_FILE - Bookmark file in HTML format (output)" sys.exit(-1) x = xbel2netscape(sys.argv) x.convert()