【问题标题】:Python Extracting from xml requestPython从xml请求中提取
【发布时间】:2021-10-22 01:55:50
【问题描述】:

我正在构建一个站点(烧瓶)并使用支付 api 进行制作,但这是我第一次使用 api,我不知道如何从 xml 中获取变量

这是从请求返回的xml

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="API_Library">
    <SOAP-ENV:Body>
        <ns1:gerarReferenciaMBResponse>
            <sucesso>true</sucesso>
            <entidade>82142</entidade>
            <referencia>000762738</referencia>
            <valor>5</valor>
            <estado>0</estado>
            <resposta>OK</resposta>
        </ns1:gerarReferenciaMBResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我的请求看起来像这样

import requests

    url = "https://sandbox.***.pt/****/api/api.php?wsdl=replica.*****.wsdl"

    payload = "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:api="API_Library">
   <soapenv:Header/>
   <soapenv:Body>
      <api:gerarReferenciaMB>
         <valor>5</valor>
         <chave>****</chave>
         <id>1</id>
         <!--Optional:-->
         <admin_callback>0</admin_callback>
         <!--Optional:-->
         <token>0</token>
         <!--Zero or more repetitions:-->
         <campos_extra>
            <id>0</id>
            <valor>0</valor>
         </campos_extra>
         <!--Optional:-->
         <per_dup>0</per_dup>
         <!--Optional:-->
         <testa_pagamento>1</testa_pagamento>
      </api:gerarReferenciaMB>
   </soapenv:Body>
</soapenv:Envelope>"
    headers = {
        'Content-Type': 'text/xml'  
    }

    response = requests.request("POST", url, headers=headers, data=payload)

我的问题是假设我如何获取 " 和 " 值来设置变量。

【问题讨论】:

  • 问题不清楚-请详细解释
  • @balderman 嘿,我从 api 请求中得到 我需要将它发送到 python 变量

标签: python xml soap


【解决方案1】:

我刚刚找到了获取方法:

    for item in a.split("</entidade>"):
        if "<entidade>" in item:
            print(item[item.find("<entidade>") + len("<entidade>"):])

    for item in a.split("</referencia>"):
        if "<referencia>" in item:
            print(item[item.find("<referencia>") + len("<referencia>"):])

这将打印标签之间的内容

【讨论】:

【解决方案2】:

试试下面的 - 它将创建一个包含您正在寻找的数据的 python dict

import xml.etree.ElementTree as ET


xml = '''<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="API_Library">
    <SOAP-ENV:Body>
        <ns1:gerarReferenciaMBResponse>
            <sucesso>true</sucesso>
            <entidade>82142</entidade>
            <referencia>000762738</referencia>
            <valor>5</valor>
            <estado>0</estado>
            <resposta>OK</resposta>
        </ns1:gerarReferenciaMBResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>'''

root = ET.fromstring(xml)
elements = ['entidade','referencia']
data = {ele.tag: ele.text for ele in list(list(root)[0][0]) if ele.tag in elements}
print(data)

输出

{'entidade': '82142', 'referencia': '000762738'}

【讨论】:

  • {ele.tag: ele.text for ele in root.iter() if ele.tag in elements}
猜你喜欢
  • 2018-11-26
  • 2010-11-02
  • 2015-03-20
  • 2016-01-16
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多