1

以下似乎无法正确解析 xml 数据或做错了什么。

这是正在运行的代码。

从 lxml 导入 etree 从 lxml.etree 导入 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>

4

2 回答 2

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()'))
于 2013-04-05T10:45:01.200 回答
0

在使用cssselect之前,您需要安装它

pip install cssselect
于 2013-04-05T11:09:03.220 回答