从多个xml文件中找到一个特定的总和组合

2024-04-26 06:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从3个不同的xml文件中找到的ID中找到一个特定的总和。 总和将始终是唯一的,xml文件中的其他3个元素值不会加在一起

我的xml文件如下所示:

水果档案:

...
-<Fruits>
<FruitID>1000</FruitID>
...
</Fruits>
...

原产国文件:

...
-<Country>
<CountryID>2000</CountryID>
...
</Country>
...

公司文件:

...
-<Corporation>
<CorporationID>5000</CorporationID>
...   
</Corporation>
...

这是我的python代码:

import xml.etree.ElementTree as ET
import urllib.request as ur

url_fruits = 'fruits-url\fruits.xml'
url_countries = 'countries-url\countries.xml'
url_corporations = 'corporations-url\corporations.xml'

fp_fruits = ur.urlopen(url_fruits)
tree_fruits = ET.parse(fp_fruits)
fruits = tree_fruits.getroot()

fp_countries = ur.urlopen(url_countries)
tree_countries = ET.parse(fp_countries)
countries = tree_countries.getroot()

fp_domain = ur.urlopen(url_corporations)
tree_domain = ET.parse(fp_corporations)
corporations = tree_corporations.getroot()


result = None
ID_userinput = input('What ID should be translated to fruit id?')

if ID_userinput == '':
    pass
else:
    for child in (fruits,countries, corporations):
        if int(ID_userinput) == int((child.find('FruitID').text) + (child.find('CountryID').text) + (child.find('CorporationID').text):
            result = child.find('FruitID')
        else:
            pass

print(result)

这总是会产生错误。 我没有找到正确的语法来同时遍历多个xml文件和所有可能的组合。 有解决办法吗

谢谢并致以最诚挚的问候, 斯特凡


Tags: 文件idchildtreeurlxmlfindcountries
1条回答
网友
1楼 · 发布于 2024-04-26 06:18:40

要了解这里发生了什么,让我们展开循环:

for child in (fruits,countries, corporations):
    if int(ID_userinput) == int((child.find('FruitID').text) + (child.find('CountryID').text) + (child.find('CorporationID').text):
        result = child.find('FruitID')
    else:
        pass

另外,摆脱无用的else,这给了我们:

if int(ID_userinput) == int((fruits.find('FruitID').text) + (fruits.find('CountryID').text) + (fruits.find('CorporationID').text):
    result = fruits.find('FruitID')
if int(ID_userinput) == int((countries.find('FruitID').text) + (countries.find('CountryID').text) + (countries.find('CorporationID').text):
    result = countries.find('FruitID')
if int(ID_userinput) == int((corporations.find('FruitID').text) + (corporations.find('CountryID').text) + (corporations.find('CorporationID').text):
    result = corporations.find('FruitID')

让我们看看这些if语句中的第一个:

if int(ID_userinput) == int((fruits.find('FruitID').text) + (fruits.find('CountryID').text) + (fruits.find('CorporationID').text):

fruits.find('CountryID')会给你什么?您的文件是否包含国家ID?如果没有,这就可以解释为什么您会得到None(然后当您尝试访问.text时会出现错误)

相反,您需要在每种类型的ID上嵌套循环

比如:

for fruit_id in fruits.iter('FruitID'):
    for country_id in countries.iter('CountryID'):
        for corporation_id in corporations.iter('CorporationID'):
            if int(ID_userinput) == int(fruit_id.text) + int(country_id.text) + int(corporation_id.text):
                result = fruit_id

还有很多方法可以进一步改进,例如,您可以在找到的第一个结果时退出所有这些循环,而不是迭代所有剩余的组合

相关问题 更多 >