python - 如何将xml属性值与python列表进行比较
问题描述
我正在尝试将 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 结束
解决方案
推荐阅读
- python-3.x - 检查列中的现有值到另一个数据框并添加行
- javascript - 有没有办法重新加载/刷新在另一个浏览器中打开的另一个 URL 在 Javascript 中的某些事件
- r - 条件循环以获取基于组的字符串长度
- javascript - 有没有办法获取一个通常可以在 HTML 中使用的 .js 小部件,并在谷歌表格中为 javascript 运行它?
- drupal - 如何修复节点“Drupal\Core\Template\TwigNodeTrans”不存在的节点“选项”
- node.js - 如何计算组聚合的评分?
- java - 无法将 Base64 MIME 图像正确解码为字节数组 (Java)
- solr - 在其同义词结果之前显示原始搜索词的结果
- talend - Talend ESB:当 XML 针对 XSD 失败时如何将被拒绝的数据写入数据库
- kotlin - 如何在 Kotlin 中初始化和使用 charArray