Я пытаюсь сравнить значение атрибута xml с предопределенным списком.Я только хочу получить id и order_num , которые соответствуют элементу, который присутствует в моем списке products .
Мой XML:
<top_root>
<top_field name="id" cust_id="205C1534" location_id="LA15454" account_id="199911">
<top_group id="921">
<top_item id="274" order_num="1X234TTB2"></top_item>
<top_item id="211" order_num="1X234TTB2"></top_item>
<top_item id="214" order_num="1X234TTB2"></top_item>
</top_group>
</top_field>
<top_field name="id" cust_id="202C1214" location_id="LA12424" account_id="199911">
<top_group id="914">
<top_item id="227" order_num="1X371TTM1"></top_item>
<top_item id="221" order_num="1X371TTM1"></top_item>
<top_item id="229" order_num="1X371TTM1"></top_item>
</top_group>
</top_field>
<top_field name="id" cust_id="202C1214" location_id="LA12424" account_id="199911">
<top_group id="814">
<top_item id="223" order_num="1X451TTA9"></top_item>
<top_item id="226" order_num="1X451TTA9"></top_item>
<top_item id="220" order_num="1X451TTA9"></top_item>
</top_group>
<top_group id="929">
<top_item id="929" order_num="1X461TTA6"></top_item>
</top_group>
</top_field>
</top_root>
Код Python:
from xml.etree import ElementTree as ET
tree = ET.parse('xml_test_files/request.xml')
root = tree.getroot()
products = {"ITEM1": "914",
"ITEM2": "288",
"ITEM3": "255",
"ITEM4": "218",
"ITEM5": "921"
}
for group in root.findall('./top_field/top_group'):
order_num = []
id = []
if group.attrib['id'] in products.values:
id.append(group.attrib['id'])
for child in group:
if child.tag == "top_item":
order_num.append(child.attrib['order_num'])
print(id)
print(order_num)
Мои желаемые результаты:
['921']
['1X234TTB2', '1X234TTB2', '1X234TTB2']
['914']
['1X371TTM1', '1X371TTM1', '1X371TTM1']
Попробуйте # 1: Выполнить как закодированныйвыше с условием if group.attrib['id'] in products.values:
Я получаю эту ошибку:
if group.attrib['id'] in products.values:
TypeError: argument of type 'builtin_function_or_method' is not iterable
Попытка № 2: Я пробовал без условия if group.attrib['id'] in products.values:
, и я получаю этот вывод:
['921']
['1X234TTB2', '1X234TTB2', '1X234TTB2']
['914']
['1X371TTM1', '1X371TTM1', '1X371TTM1']
['814']
['1X451TTA9', '1X451TTA9', '1X451TTA9']
['929']
['1X461TTA6']
Попробуйте #3: Когда я изменяю findall на iter и оставляю условие if group.attrib['id'] in products.values:
, я больше не получаю сообщение об ошибке, но мой вывод пуст:
Процесс завершен скод выхода 0