У меня есть элемент, у которого есть предметы и тег. Элемент может содержать больше элементов, которые также имеют элементы и тег, и эти элементы также могут иметь элементы и тег. Предварительно я не знаю, сколько «вложенных» элементов в первом элементе.
Я хочу сохранить тег и элементы в словаре с элементом в качестве ключа, и если элемент имеет «вложенный» элемент, я хочу сохранить этот элемент и его информацию в той же записи словаря, что и его «родительский элемент» .
Код, который у меня есть, работает, только если у первого элемента есть вложенный элемент, а во вложенном элементе нет другого вложенного элемента. Это код:
def getAllNestedElementInformation(element, nestedDict=None):
infoDict = {'tagName':element.tag}
infoDict.update(getItems(element))
if nestedDict == None:
nestedDict = infoDict
else:
nestedDict['nestedElement'][element] = infoDict
print nestedDict
for nestedElement in element:
nestedDict.update({'nestedElement':collections.defaultdict(dict)})
getAllNestedElementInformation(nestedElement, nestedDict=nestedDict)
Я хочу иметь
{'name':'scan', 'nestedElement':{'name':'scanwindow', 'nestedElement':{'name:'cvParam'}}}
но я не иду дальше, чем
{'name':'scan', 'nestedElement':{'name:'scanwindow'}}
потому что я не знаю, как отобразить следующий nestedElement в слове 'nestedElement'.
Чтобы привести пример того, что у меня есть сейчас и что я хочу получить, когда я печатаю nestedDict, я получаю:
{'index': '0', 'nestedElement': {<Element 'scan' at 0x8068180>: {'tagName': 'scan'}}, 'tagName': 'spectrum', 'id': '1'}
{'index': '0', 'nestedElement': {<Element 'cvParam' at 0x80682a0>: {'name': 'scan start time', 'unitName': 'second', 'tagName': 'cvParam', }}, 'tagName': 'spectrum', 'id': '1'}
И я хочу иметь:
{'index': '0', 'nestedElement': {<Element 'scan' at 0x8068180>: 'tagName': 'scan', 'nestedElement: {'name': 'scan start time', 'unitName': 'second', 'tagName': 'cvParam', }}, 'tagName': 'spectrum', 'id': '1'}