From: Sapan Bhatia Date: Thu, 9 Jul 2009 17:50:46 +0000 (+0000) Subject: Sigh, annoying little runt bug X-Git-Tag: sfa-0.9-0@14641~89 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=ed316f872b2c25ce6cbcaa281ac21e360c5a6372;p=sfa.git Sigh, annoying little runt bug --- diff --git a/sfa/util/rspec.py b/sfa/util/rspec.py index bbbff65a..94ef1ff0 100644 --- a/sfa/util/rspec.py +++ b/sfa/util/rspec.py @@ -77,7 +77,7 @@ class Rspec: dict[key]=[value] return dict - def toGenDict(self, nodeDom=None, parentdict={}, siblingdict={}, parent=None): + def toGenDict(self, nodeDom=None, parentdict=None, siblingdict={}, parent=None): """ convert an XML to a nested dict: * Non-terminal nodes (elements with string children and attributes) are simple dictionaries @@ -89,17 +89,25 @@ class Rspec: curNodeName = nodeDom.localName - if (nodeDom.nodeValue): - siblingdict = self.appendToDictOrCreate(siblingdict, parent, nodeDom.nodeValue) - elif (nodeDom.hasChildNodes()): - for child in nodeDom.childNodes: - siblingdict = self.toGenDict(child, None, siblingdict,curNodeName) + if (nodeDom.hasChildNodes()): + childdict={} + for child in nodeDom.childNodes[:-1]: + if (child.nodeValue): + siblingdict = self.appendToDictOrCreate(siblingdict, curNodeName, child.nodeValue) + else: + childdict = self.toGenDict(child, None, childdict, curNodeName) + + child = nodeDom.childNodes[-1] + if (child.nodeValue): + siblingdict = self.appendToDictOrCreate(siblingdict, curNodeName, child.nodeValue) + else: + siblingdict = self.toGenDict(child, siblingdict, childdict, curNodeName) for attribute in nodeDom.attributes.keys(): siblingdict = self.appendToDictOrCreate(siblingdict, attribute, nodeDom.getAttribute(attribute)) if (parentdict is not None): - parentdict = self.appendToDictOrCreate(parentdict, curNodeName, siblingdict) + parentdict = self.appendToDictOrCreate(parentdict, parent, siblingdict) return parentdict else: return siblingdict