我正在尝试将xml属性的值与预定义列表进行比较。我只想检索与产品列表中存在的项目相对应的 id 和 order_num 。
我的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结束的过程