您有2个问题。
1)
element仅包含根元素,而不包含整个文档。它是Element类型而不是ElementTree类型。
2)如果将命名空间保留在XML中,则搜索字符串需要使用命名空间。
要解决问题1:
您需要更改:
element = ET.parse(fp).getroot()
至:
element = ET.parse(fp)
要解决问题2:
您可以从XML文档中删除xmlns,如下所示:
<?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 ETfp = open("output.xml","r")element = ET.parse(fp)e = element.findall('Items/Item/ItemAttributes/ListPrice/Amount')for i in e: print i.text问题2的替代解决方案:
否则,您需要为每个元素在srearch字符串中指定xmlns。
完整代码:
from elementtree import ElementTree as ETfp = 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



