我尝试找到一个由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文件和所有可能的组合。 有解决方案吗?
谢谢和最诚挚的问候, 斯蒂芬
答案 0 :(得分:0)
要了解这里发生了什么,让我们展开你的循环:
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
还有很多方法可以进一步改进 - 例如,您可以在找到的第一个结果处退出所有这些循环,而不是迭代所有剩余的组合。