以下似乎没有正确解析xml数据或者做错了。
这是正在运行的代码。
来自lxml import etree 来自lxml.etree import fromstring
if request.POST:
xml = request.POST['xml'].encode('utf-8')
parser = etree.XMLParser(ns_clean=True, recover=True, encoding='utf-8')
h = fromstring(xml, parser=parser)
status = h.cssselect('itagg_delivery_receipt status').text_content()
return HttpResponse(status)
错误:
AttributeError:'lxml.etree._Element'对象没有属性'cssselect'状态
这是正在发送的xml文档:
<?xml version="1.1" encoding="ISO-8859-1"?>
<itagg_delivery_receipt>
<version>1.0</version>
<msisdn>447889000000</msisdn>
<submission_ref>
845tgrgsehg394g3hdfhhh56445y7ts6</
submission_ref>
<status>Delivered</status>
<reason>4</reason>
<timestamp>20050709120945</timestamp>
<retry>0</retry>
</itagg_delivery_receipt>
我已经抛弃了str(h),它看起来像<element 0x7fd341e93870="" at="" itagg_delivery_receipt=""></element>
答案 0 :(得分:1)
以下是使用xpath
获取所需内容的方法:
>>> h.xpath('status/text()')
['Delivered']
所以在你的代码中有一个小帮助函数:
def first(seq,default=None):
for item in seq:
return item
return default
...
status = first(h.xpath('status/text()'))
答案 1 :(得分:0)
在使用cssselect之前,您需要安装它
pip install cssselect