无法使用多个ElementTree fromstring语句

2024-07-01 06:51:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我可能用了完全错误的方法,但我对ElementTree和XML名称空间是新手。我正在处理一个eBay API响应,并试图从同一个XML响应中获取多个数据段。我首先尝试了几个for语句,比如:

for i in ET.fromstring(response.text, parser=parser).findall('.//{urn:ebay:apis:eBLBaseComponents}UPC'):
    print(i.text)
for x in ET.fromstring(response.text, parser=parser).findall('.//{urn:ebay:apis:eBLBaseComponents}Title'):
    print(x.text)

因此,第一个for语句可以很好地工作——它获得了我需要的所有数据。但第二个返回一个错误:

xml.etree.ElementTree.ParseError: parsing finished: line 2, column 13941

所以我想,好吧,让我们从不同的角度来尝试。我使用了以下代码:

for x in ET.fromstring(response.text, parser=parser):
    one = x.findall('.//{urn:ebay:apis:eBLBaseComponents}UPC')
    two = x.findall('.//{urn:ebay:apis:eBLBaseComponents}Title')
    print(one, two)

所以这返回了大量的“元素”,所以一开始我觉得-太棒了!示例如下:

[<Element '{urn:ebay:apis:eBLBaseComponents}UPC' at 0x03BFF8A0>, <Element '{urn:ebay:apis:eBLBaseComponents}UPC' at 0x03BFFB40>, <Element '{urn:ebay:apis:eBLBaseComponents}UPC' at 0x03BFFDE0>, <Element '{urn:ebay:apis:eBLBaseComponents}UPC' at 0x03C020C0> etc...

因此,我认为这是从同一个XML源获取多个数据段的正确方法。然而,因为我没有做x.text,所以我实际上没有得到数据,只是得到元素。我意识到做print(one.text)是行不通的

因此,我的问题是,我在这里走的是正确的道路吗?其次,我如何从XML响应中获取多个数据片段?或者,如何将这些元素转换为我需要的数据


Tags: 数据textinparserforxmlelementat

热门问题