У вас есть 2 проблемы.
1) element
содержит только корневой элемент, а не рекурсивно весь документ. Он имеет тип Element, а не ElementTree.
2) Строка поиска должна использовать пространства имен, если вы сохраняете пространство имен в XML.
Чтобы исправить проблему # 1:
Вам нужно изменить:
element = ET.parse(fp).getroot()
до:
element = ET.parse(fp)
Чтобы исправить проблему № 2:
Вы можете удалить xmlns из документа XML, чтобы он выглядел следующим образом:
<?xml version="1.0"?>
<ItemSearchResponse>
<Items>
<Item>
<ItemAttributes>
<ListPrice>
<Amount>2260</Amount>
</ListPrice>
</ItemAttributes>
<Offers>
<Offer>
<OfferListing>
<Price>
<Amount>1853</Amount>
</Price>
</OfferListing>
</Offer>
</Offers>
</Item>
</Items>
</ItemSearchResponse>
С этим документом вы можете использовать следующую строку поиска:
e = element.findall('Items/Item/ItemAttributes/ListPrice/Amount')
Полный код:
from elementtree import ElementTree as ET
fp = open("output.xml","r")
element = ET.parse(fp)
e = element.findall('Items/Item/ItemAttributes/ListPrice/Amount')
for i in e:
print i.text
Альтернативное решение проблемы № 2:
В противном случае вам нужно указать xmlns внутри строки srearch для каждого элемента.
Полный код:
from elementtree import ElementTree as ET
fp = open("output.xml","r")
element = ET.parse(fp)
namespace = "{http://webservices.amazon.com/AWSECommerceService/2008-08-19}"
e = element.findall('{0}Items/{0}Item/{0}ItemAttributes/{0}ListPrice/{0}Amount'.format(namespace))
for i in e:
print i.text
Обе печати:
2260