Python 3.x 如何使用lxml访问xml字段?
Python 3.6、Lxml、Windows 10 我快疯了。我想访问项目字段。但我总是犯错误: AttributeError:'cython\u function\u或\u method'对象没有属性'item' 我可以访问的所有其他内容(地址字段等)都没有问题。如何访问项目字段(sku、金额等) 我使用了以下代码:Python 3.x 如何使用lxml访问xml字段?,python-3.x,lxml,lxml.objectify,Python 3.x,Lxml,Lxml.objectify,Python 3.6、Lxml、Windows 10 我快疯了。我想访问项目字段。但我总是犯错误: AttributeError:'cython\u function\u或\u method'对象没有属性'item' 我可以访问的所有其他内容(地址字段等)都没有问题。如何访问项目字段(sku、金额等) 我使用了以下代码: import requests from lxml import objectify url = "URL_TO_XML_FILE" xml_content = reques
import requests
from lxml import objectify
url = "URL_TO_XML_FILE"
xml_content = requests.get(url).text.encode('utf-8')
xml = objectify.fromstring(xml_content)
for sale in xml.response.sales.sale:
for item in sale.items.item:
print(item.sku)
以下是xml的开头:
2017-08-07
卖方
2017-08-07
95029358
297453287592813953
15/12/2018-19:10
正常的
N
电子邮件
夫人
13570
外汇
电话号码
411812243030
15.99
欧元
551131040
N
N
15.99
欧元
N
4363745894373857474;
问题在于items实际上是ObjectifiedElement的方法,因此表达式sale.items实际上返回该方法,因为它具有优先级
要获取所需的“items”对象,必须更明确地获取sale属性,而不是首先查找类的方法,这是通常的python顺序。这是python在访问属性时在幕后所做的,您也可以这样做:
sale.__getattr__('items')
这也会起作用(它是一个类似于字典的对象属性接口):
修订守则:
import requests
from lxml import objectify
url = "URL_TO_XML_FILE"
xml_content = requests.get(url).text.encode('utf-8')
xml = objectify.fromstring(xml_content)
for sale in xml.response.sales.sale:
for item in sale.__dict__['items'].item:
print(item.sku)
问题是items实际上是ObjectifiedElement的方法,因此表达式sale.items实际上返回该方法,因为它具有优先级
要获取所需的“items”对象,必须更明确地获取sale属性,而不是首先查找类的方法,这是通常的python顺序。这是python在访问属性时在幕后所做的,您也可以这样做:
sale.__getattr__('items')
这也会起作用(它是一个类似于字典的对象属性接口):
修订守则:
import requests
from lxml import objectify
url = "URL_TO_XML_FILE"
xml_content = requests.get(url).text.encode('utf-8')
xml = objectify.fromstring(xml_content)
for sale in xml.response.sales.sale:
for item in sale.__dict__['items'].item:
print(item.sku)
另一种处理方法是避免使用片状属性接口:
for sale in xml['response']['sales']['sale']:
for item in sale['items']['item']:
print(item['sku'])
使用类似dict的索引界面,您不必担心某些属性名称(其中包括诸如
项
、索引
、键
、删除
、替换
、标记
、设置
、文本
、和值
)返回令人惊讶的结果。另一种处理方法是避免使用片状属性界面:
for sale in xml['response']['sales']['sale']:
for item in sale['items']['item']:
print(item['sku'])
使用类似dict的索引界面,您不必担心某些属性名称(其中包括诸如
项
、索引
、键
、删除
、替换
、标记
、设置
、文本
、和值
)返回令人惊讶的结果。非常感谢。我已经浪费了好几个小时想让它发挥作用。现在一切都好了,非常感谢。我已经浪费了好几个小时想让它发挥作用。现在一切都好了。