from lxml import etree
def xmlToDict(node):
if len(node) == 0:
return node.tag, node.text
data = {}
temp = None
for child in node:
key, val = xmlToDict(child)
if key in data:
if type(data[key]) == list:
data[key].append(val)
else:
temp = data[key]
data[key] = [temp, val]
else:
data[key] = val
return node.tag, data
if __name__ == '__main__':
strxml = "<request><header>top</header><body><stu><name>alex</name><age>11</age></stu><stu><name>alen</name><age>16</age></stu></body></request>"
tree, id = etree.XMLID(strxml)
tag, data = xmlToDict(tree)
print("tag", tag)
print("data", data)