Как добавить имя пользователя и пароль для формата xml с помощью python

def test(login,password):
    data="""<?xml version="1.0"?>
        <soap-env>
        <soap-env:Body>
        <Auth>
        <Login>login</Login><password>password</password>
        </Auth>
        <Ping>
        </Ping>
        </soap-env:Body>
        </soap-env:Envelope>"""
    return data

я не могу добавить логин и пароль, когда я использую '+login+' и я не могу сделать строку формата как эта " "

Попробуйте ниже (строка 'f')

def test(login,password):
    data=f"""<?xml version="1.0"?>
        <soap-env>
        <soap-env:Body>
        <Auth>
        <Login>{login}</Login><password>{password}</password>
        </Auth>
        <Ping>
        </Ping>
        </soap-env:Body>
        </soap-env:Envelope>"""
    return data

print(test('jack','secret'))

output

<?xml version="1.0"?>
        <soap-env>
        <soap-env:Body>
        <Auth>
        <Login>jack</Login><password>secret</password>
        </Auth>
        <Ping>
        </Ping>
        </soap-env:Body>
        </soap-env:Envelope>

Если вы видите, что данные являются XML, вы должны использовать модуль XML для их создания. Построение строки, которая выглядит как XML, не очень хорошая идея, так как она может легко нарушить стандарт. Вот как это может (должно) быть сделано с помощью встроенного модуля xml.etree.ElementTree:

import xml.etree.ElementTree as ET

def test(login, password):
    envelope_uri = "http://schemas.xmlsoap.org/soap/envelope/"
    ET.register_namespace("soap-env", envelope_uri)
    envelope_node = ET.Element(ET.QName(envelope_uri, "Envelope"))
    body_node = ET.SubElement(envelope_node, ET.QName(envelope_uri, "Body"))
    auth_node = ET.SubElement(body_node, "Auth")
    ET.SubElement(auth_node, "Login").text = login
    ET.SubElement(auth_node, "Password").text = password
    ET.SubElement(body_node, "Ping")

    # ET.indent(envelope_node)  # uncomment this to get indented output (python 3.9+)
    return ET.tostring(
        envelope_node,  # root node
        "utf-8",  # encoding
        xml_declaration=True,  # add xml declaration on top
        short_empty_elements=False  # use start/end pair for empty nodes
    ).decode()

print(test("login",  "p<>&sword"))

Этот код выдаст следующий результат:

<?xml version='1.0' encoding='utf-8'?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
  <soap-env:Body>
    <Auth>
      <Login>login</Login>
      <Password>p&lt;&gt;&amp;sword</Password>
    </Auth>
    <Ping></Ping>
  </soap-env:Body>
</soap-env:Envelope>

Это valid XML (proof).

Функция из принятого ответа с теми же аргументами выдаст следующий результат:

<?xml version="1.0"?>
        <soap-env>
        <soap-env:Body>
        <Auth>
        <Login>login</Login><password>p<>&sword</password>
        </Auth>
        <Ping>
        </Ping>
        </soap-env:Body>
        </soap-env:Envelope>

Это неверный XML (proof).

Вернуться на верх