我可能以完全错误的方式进行此操作,但是我是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
,因此实际上并没有获取数据,仅是Element。而且我意识到做print(one.text)
无效。
所以我的问题是,我在这里走的路正确吗?其次,我如何从XML响应中获取多个数据-或者将这些Elements转换成我需要的数据?