Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用python解析xml响应?_Python_Xml - Fatal编程技术网

如何用python解析xml响应?

如何用python解析xml响应?,python,xml,Python,Xml,我从API调用中获得XML响应(使用python)。如何解析xml响应 xml响应: 200 OK <?xml version='1.0' encoding='UTF-8' ?> <mail> <delivery id='123'> <deliver_id>xxx</deliver_id> <request_id>xxx</request_id> <exec_cnt>1</exec

我从API调用中获得XML响应(使用python)。如何解析xml响应

xml响应:

200 OK
<?xml version='1.0' encoding='UTF-8' ?>
<mail>
 <delivery id='123'>
  <deliver_id>xxx</deliver_id>
  <request_id>xxx</request_id>
  <exec_cnt>1</exec_cnt>
  <result code='0'>success</result>
 </delivery>
</mail>
def sendMail():
    context = ssl._create_unverified_context()
    header = {"Content-Type": "text/xml"}
    url = "xxx"
    body = "xxx"
    try:
            conn = http.client.HTTPSConnection("54.199.162.74", context=context)
            conn.request(method="POST", url=url, body=body.encode("UTF-8"), headers=header, encode_chunked=True)
            response = conn.getresponse()
            mail_response = response.read()
            print(response.status, response.reason)
            print(mail_response.decode('utf-8'))
    except Exception as e:
            print(e)
    return response

sendMail()
我试图用这段代码解析xml响应,但总是返回错误

import xml.etree.ElementTree as ET
response_xml_as_string = mail_response.decode('utf-8')

>>> tree = ET.fromstring(response_xml_as_string)
>>> root = tree.getroot()
>>> root.tag
'mail'
>>> root.attrib
{}
>>> for child in root:
...     print(child.tag, child.attrib)
我得到的错误是:

'xml.etree.ElementTree.Element'对象没有属性'getroot'


ElementTree
实例没有
getroot
属性。您将从树的根开始,然后可以使用
iter(tree)
迭代子元素:

将xml.ElementTree作为ET导入
resp=”“”
xxx
xxx
1.
成功
"""
tree=ET.fromstring(resp)
目录(树)
# “UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"初始","初始","子类","减小","减小","减小","减小",titem_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
#这里没有getroot方法
#只需迭代每个元素
对于树中的元素:
打印(elem.text,elem.attrib)
如果elem.getchildren():
#也要重复它们

您还可以使用BeatuifulSoup解析和提取内容

from bs4 import BeautifulSoup as Soup
resp = """<?xml version='1.0' encoding='UTF-8' ?>
<mail>
 <delivery id='123'>
  <deliver_id>xxx</deliver_id>
  <request_id>yyy</request_id>
  <exec_cnt>1</exec_cnt>
  <result code='0'>success</result>
 </delivery>
</mail>"""

soup = Soup(resp,'xml')
#extracting data between request_id Tag
print(soup.request_id.get_text())

#extracting data between deliver ID Tag
print(soup.deliver_id.get_text())

#extracting the  result code and the data between the tag
print(soup.result['code'])
print(soup.result.get_text())
从bs4导入BeautifulSoup作为汤
resp=”“”
xxx
yyy
1.
成功
"""
汤=汤(分别为'xml')
#提取请求与id标记之间的数据
打印(soup.request\u id.get\u text())
#在deliver-ID标签之间提取数据
打印(soup.deliver\u id.get\u text())
#提取结果代码和标记之间的数据
打印(soup.result['code'])
打印(soup.result.get_text())
你可以在下面的链接中找到关于靓汤的更多信息


通过您的代码,我可以获得交付id、请求id、执行id、结果消息(成功)的值。但我仍然不知道如何获得结果代码(0)。您知道如何获得它吗?