我是python的新手,已经为这个任务苦苦挣扎了一段时间。我有一个输入文件,其中列出了三个URL。我想使用请求在URL处获取XML文档,并在尝试检索URL并将该值包括为消息的一部分时记录一条INFO消息。这是输入文件URL的
http://kitty.ninja/file1.xml
http://kitty.ninja/badurl.xml
http://kitty.ninja/file3.xml
到目前为止,这是我的代码,我继续完成退出代码:
import logging
import requests
from xml.etree import ElementTree as ET
r = requests.get('http://kitty.ninja/file1.xml')
print("Now attempting to get data at:", ('http://kitty.ninja/file1.xml'))
if r.status_code == 200:
print("200 - Successfully retrieved:", ('http://kitty.ninja/file1.xml'))
tree = ET.fromstring("hw8-input")
root = tree.getroot()
for customer in root.findall('customer'):
name = customer.find('name').text
checking_account = customer.find("checking_account").text
try:
savings_account = customer.find('savings_account').text
except AttributeError:
savings_account = "None"
print(name, "Checking Account:", checking_account, "Savings Account:", savings_account)
elif r.status_code == 404:
print("Resource not found")
您应该使用其他更有效的(IMHO)库。我简化了代码:
from lxml import etree
root = etree.fromstring(r.content)
从那里开始,代码与您的问题相同。
但是,由于这是一个xml文件,因此最好改用xpath方法(同样是IMHO)。在这种情况下,看起来可能没有什么大不同,但是在xml变得非常复杂(并且经常如此)的情况下,xpath更为优越。 xpath方法看起来像这样(我将try / except块替换为if / else块,但这只是个人喜好):
for customer in root.xpath('//customer'):
checking_account = customer.xpath("./checking_account")[0].text
if len(customer.xpath('./savings_account'))>0:
savings_account = customer.xpath('./savings_account')[0].text
else:
savings_account = "None"
name = customer.xpath('./name')[0].text
print(name, "Checking Account:", checking_account, "Savings Account:", savings_account)
无论哪种情况,输出都是相同的:
Susan Stone Checking Account: 465498435 Savings Account: None
Roger Roman Checking Account: 165498165 Savings Account: 64565435
Gary Grooman Checking Account: 654846546 Savings Account: None
Janet Jones Checking Account: 954387383 Savings Account: None
Nancy Noons Checking Account: 684981651 Savings Account: 5645648465