Oops... sorry.. somehow handleXML got nipped.. this might be handy for someone else wanting simple xml converted to dicts for easy python processing.. On Monday, August 6, 2001, at 03:43 AM, Steve Spicklemire wrote:
Hi Nigel,
On Monday, August 6, 2001, at 12:18 AM, Nigel Head wrote:
I saw an enquiry a while back about Flash XML-RPC clients. After some spelunking I can add my 2 eurocents to the situation ... unfortunately not good news.
handleXML: # # Handle XML input from Flash. # Needs ParsedXML product installed. # if __name__=="__main__": """ For in 'IDE' testing.. """ import sys sys.path.append('/usr/local/etc/Zope2b/lib/python') import ZODB from Products.ParsedXML.DOM import ExpatBuilder try: from cStringIO import StringIO except ImportError: from StringIO import StringIO def handleXML(xmlString, debug=0): return toDict(DOMParseString( None, xmlString), debug=debug) def DOMParseString(self, xml): file = StringIO(xml) return ExpatBuilder.parse(file) def toDict( xmlThing, currDict=None, debug=0 ): if currDict is None: currDict = {} if hasattr(xmlThing,'data'): currDict['data'] = xmlThing.data if hasattr(xmlThing, '_attributes'): if debug: print "checking attributes:", xmlThing._attributes for attr in xmlThing._attributes: if currDict.has_key(attr[1]): oldVal = currDict[attr[1]] if type(oldVal)==type(''): currDict[attr[1]]=[oldVal, attr[4]] else: oldVal.append(attr[4]) else: currDict[attr[1]] = attr[4] if hasattr(xmlThing, '_children'): for subThing in xmlThing._children: newDict = toDict(subThing) if hasattr(subThing, 'data'): currDict['data'] = subThing.data elif hasattr(subThing, 'nodeName'): if currDict.has_key(subThing.nodeName): oldVal=currDict[subThing.nodeName] if type(oldVal)==type({}): currDict[subThing.nodeName]=[oldVal, newDict] else: oldVal.append(newDict) else: currDict[subThing.nodeName] = newDict return currDict theXML = """<?xml version = "1.0"?> <CD title="2 Against Nature"> <track title = "gaslighting abbie"/> <track title = "what a shame about me"/> <track title = "two against nature"/> <track title = "janie runaway"/> <track title = "almost gothic"/> <track title = "jack of speed"/> <track title = "cousin dupree"/> <track title = "negative girl"/> <track title = "west of hollywood"/> <relatedItems artist = "Steely Dan"/> <relatedItems artist = "Walter Becker"/> <relatedItems artist = "Donald Fagen"/> </CD> """ if __name__=="__main__": #print handleXML('<querySources level="/my/favorite/place"/>') print handleXML(theXML, debug=1)