#!/usr/bin/python # rhythmdb_dump by Sam Morris # version 1.0 # # prints the paths of all songs in a rhythmdb.xml file import xml.parsers.expat import sys import urlparse import urllib class state: stack = [] data = None in_song = False def element_start (self, name, attrs): self.stack.append (name) if self.stack == ['rhythmdb']: if attrs ['version'] != '1.0': raise 'Unknown rhythmdb version ' + attrs ['version'] elif self.stack == ['rhythmdb', 'entry']: if attrs ['type'] == 'song': self.in_song = True else: self.in_song = False elif self.stack == ['rhythmdb', 'entry', 'location']: if self.in_song == True: self.data = '' def element_end (self, name): self.stack.pop () if self.data != None: path = urlparse.urlparse (self.data) [2] print urllib.unquote (path.encode ('ascii')) self.data = None def char_data (self, data): if self.data != None: self.data += data p = xml.parsers.expat.ParserCreate () s = state () p.StartElementHandler = s.element_start p.EndElementHandler = s.element_end p.CharacterDataHandler = s.char_data try: file = open (sys.argv [1], 'r') except IndexError: file = sys.stdin p.ParseFile (file)