我的XML文件如下所示:
<?xml version="1.0"?>
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2008-08-19">
<Items>
<Item>
<ItemAttributes>
<ListPrice>
<Amount>2260</Amount>
</ListPrice>
</ItemAttributes>
<Offers>
<Offer>
<OfferListing>
<Price>
<Amount>1853</Amount>
</Price>
</OfferListing>
</Offer>
</Offers>
</Item>
</Items>
</ItemSearchResponse>
我要做的就是提取ListPrice。
这是我正在使用的代码:
>> from elementtree import ElementTree as ET
>> fp = open("output.xml","r")
>> element = ET.parse(fp).getroot()
>> e = element.findall('ItemSearchResponse/Items/Item/ItemAttributes/ListPrice/Amount')
>> for i in e:
>> print i.text
>>
>> e
>>
绝对没有输出。我也试过
>> e = element.findall('Items/Item/ItemAttributes/ListPrice/Amount')
没有不同。
我究竟做错了什么?
您有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 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的替代解决方案:
否则,您需要为每个元素在srearch字符串中指定xmlns。
完整代码:
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
问题内容: 我一直在使用django和elementtree开发应用程序,并将其部署到生产服务器时发现它正在运行python 2.4。我已经能够捆绑elementtree但现在我得到了错误: 不幸的是,我无法升级python,因此即时通讯卡住了我得到的内容。如何使用SimpleXMLTreeBuilder作为解析器和/或需要重写代码? 问题答案: 如果你有想要使用ElementTree的第三方模块
问题内容: 我很难找到一个很好的基本示例,说明如何使用元素树在python中解析XML。据我所知,这似乎是用于解析XML的最简单的库。这是我正在使用的XML的示例: 我可以使用硬编码的方法来做我需要的事情。但是我需要我的代码更具动态性。这是起作用的: 这是我尝试过的几件事,但都没有奏效,报告他们找不到timeSeries(或我尝试过的其他任何东西): 基本上,我想加载xml文件,搜索timeSer
问题内容: 给定如下所示的XML: 如何使用ElementTree及其对XPath的支持将元素与内容A匹配?谢谢 问题答案: AFAIK ElementTree不支持XPath。它改变了吗? 无论如何,您可以使用lxml和以下XPath表达式: 结果将是:
本文向大家介绍Python中使用ElementTree解析XML示例,包括了Python中使用ElementTree解析XML示例的使用技巧和注意事项,需要的朋友参考一下 【XML基本概念介绍】 XML 指可扩展标记语言(eXtensible Markup Language)。 XML 被设计用来传输和存储数据。 概念一: 概念二: 概念三: 概念四: 概念五: 概念六: 【XML几种解析方法】
问题内容: 我试图发出带有元素树的XML文件,其中包含XML声明和名称空间。这是我的示例代码: 但是,既不会出现标签,也不会出现任何名称空间/前缀信息。我在这里有点困惑。 问题答案: 尽管文档另有说明,但我只能通过同时指定xml_declaration和编码来获得声明。 您必须在已注册的名称空间中声明节点,以在文件中的节点上获取名称空间。这是您的代码的固定版本: 输出(page.xml) Elem
问题内容: 我正在尝试开发简单的Python(3.2)代码以读取XML文件,进行一些 更正 并将其存储回去。但是,在存储步骤中,ElementTree添加此命名空间命名法。例如: 该代码段如下: 我尝试使用,但没有任何积极结果。此版本的ElementTree 1.3是否有任何特定更改? 问题答案: 为了避免使用前缀,应 在 读取XML数据 之前 设置默认名称空间。