在lxml FAQs中,它们提供以下内容:
如何将XML树映射到字典中?
我很高兴你问:
def recursive_dict(element):
return element.tag, \
dict(map(recursive_dict, element)) or element.text
但是当我尝试使用它时,我得到以下信息:
>>> r = requests.get('http://localhost:8983/solr/admin/cores?action=STATUS')
>>> xml_dict = recursive_dict(lxml.etree.parse(StringIO.StringIO(r.content)))
AttributeError: 'lxml.etree._ElementTree' object has no attribute 'tag'
我是否缺少将ElementTree转换为元素的步骤?
最佳答案
lxml.etree.parse
返回一个ElementTree
对象,而不是Element
对象。从documentation:
ElementTree主要是围绕带有根的树的文档包装器
节点。它提供了两种序列化和通用方法
文件处理。ElementTree.getroot()
返回文档的根元素:
xml_doc = lxml.etree.parse(StringIO.StringIO(r.content))
xml_dict = recursive_dict(xml_doc.getroot())
编辑
这是
recursive_dict
的一个变体,可能更适合:def recursive_dict(element):
retval = {}
retval["tag"] = element.tag
if element.text:
retval["text"] = element.text
if element.tail:
retval["tail"] = element.tail
if element.attrib:
retval["attributes"] = element.attrib
if len(element) > 0:
retval["children"] = [recursive_dict(child_element) for child_element in element]
return retval
关于python - 为什么lxml FAQ中的recursive_dict不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19644391/