我需要从目录中的各种 xml 文件中提取信息。它们都具有相同的结构,但可能在对“”/pair 中存储不同数量的值。我正在使用 xmltodict 访问不同的对“值”/pair 并将它们存储在一个字典中。不幸的是,xml 看起来像这样:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
<pair key="commandName">value2</pair>
<pair key="commandName">value3</pair>
<pair key="commandName">value4</pair>
</arguments>
</condition>
</operation>
</application>
</applications>
这绝对不是最好的解决方案,但我是一个完全的初学者,需要完成这项工作。我的代码看起来像这样
if application['@name'] == "Test":
for pair in application['operation']['condition'][1]['arguments']:
if pair["@key"]["#text"] == 'value1':
value1 = 'available'
if pair["@key"]["#text"] == 'value2':
value2 = 'available'
....
Test_dict = {'value1': value1, 'value2': value2....}
这是我的输出:
if pair["@key"]["#text"] == 'value1':
TypeError: string indices must be integers
我怎样才能让它工作?
编辑:
我又来了,还在努力解决这个问题。
Jonathans 解决方案适用于所有情况,除了我只有一对值的情况。例如:
<license xmlns:="http://www.example.com">
<application name="TEST">
<operation>
<condition implication="stop" name="module">
<arguments>
<pair key="version">1</pair>
</arguments>
</condition>
<condition implication="stop" name="allowed">
<arguments>
<pair key="commandName">value1</pair>
</arguments>
</condition>
</operation>
</application>
</license>
我仍然收到相同的错误消息。
if pair["#text"] == 'value2': TypeError: string indices must be integers
只要有不止一对值,这种方法就可以很好地工作。关于如何解决这个问题的任何方法?