From ed316f872b2c25ce6cbcaa281ac21e360c5a6372 Mon Sep 17 00:00:00 2001 From: Sapan Bhatia Date: Thu, 9 Jul 2009 17:50:46 +0000 Subject: [PATCH] Sigh, annoying little runt bug --- sfa/util/rspec.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) 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 -- 2.43.0