Мне нужно извлечь информацию из различных XML-файлов в каталоге.Все они имеют одинаковую структуру, но могут иметь различное количество значений, хранящихся в паре "" / пара.Я использую xmltodict для доступа к другой паре "значения" / пара и хранить их в dict.К сожалению, 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 Solution работает для всех сценариев, кроме одного, где у меня есть только одно значение пары.например:
<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
Пока существует более одного значения пары, этот подход работает отлично.Любой подход, как это исправить?