首页 > 解决方案 > 如何将xml属性值与python列表进行比较

问题描述

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

标签: pythonxml-parsingelementtree

解决方案


推荐阅读