0

我在使用 python xmltodict 时遇到问题。遵循此处几乎一致的建议,我尝试了 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,只要我有办法解决这个问题。有没有人有这个问题的解决方案或可以更好地处理这个问题的包?

4

1 回答 1

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')]))

于 2018-05-18T21:28:27.753 回答