Python 3.x 如何使用lxml访问xml字段?

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

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 = 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的索引界面,您不必担心某些属性名称(其中包括诸如
索引
删除
替换
标记
设置
文本
、和
)返回令人惊讶的结果。

非常感谢。我已经浪费了好几个小时想让它发挥作用。现在一切都好了,非常感谢。我已经浪费了好几个小时想让它发挥作用。现在一切都好了。