我遇到python xmltodict的问题。在接近共识建议here之后,我尝试了xmltodict并非常喜欢它,直到我必须在我的处理程序的顶层访问属性。我可能做错了什么,但我不清楚是什么。我有一个看起来像这样的xml文档
<api>
<cons id="79550" modified_dt="1526652449">
<firstname>Mackenzie</firstname>
...
</cons>
<cons id="79551" modified_dt="1526652549">
<firstname>Joe</firstname>
...
</cons>
<api>
我用它解析它:
xmltodict.parse(apiResult.body, item_depth=2, item_callback=handler, xml_attribs=True)
其中apiResult.body
包含上面显示的xml。但是,尽管有xml_attribs=True
,但在处理程序中解析后,我在输出中看不到@id
或@modified_dt
,尽管原始中的所有元素都是出现。
处理程序编码如下:
def handler(_, cons):
print (cons)
mc = MatchChecker(cons)
mc.check()
return True
我可能做错了什么?
我也尝试过xmljson并立即不喜欢它和xmltodict一样,只要我解决了这个问题。有没有人有这个问题的解决方案或能够更好地处理这个问题的软件包?
答案 0 :(得分:1)
xmltodict
工作正常,但您正在解析参数item_depth=2
,这意味着您的处理程序只会看到<cons>
元素内的元素而不是<cons>
元素本身
xml = """
<api>
<cons id="79550" modified_dt="1526652449">
<firstname>Mackenzie</firstname>
</cons>
</api>
"""
def handler(_,arg):
for i in arg.items():
print(i)
return True
xmltodict.parse(xml, item_depth=2, item_callback=handler, xml_attribs=True)
按预期打印('firstname', 'Mackenzie')
。
鉴于:
xmltodict.parse(xml, item_depth=1, item_callback=handler, xml_attribs=True)
按预期再次打印('cons', OrderedDict([('@id', '79550'), ('@modified_dt', '1526652449'), ('firstname', 'Mackenzie')]))
。