Как добавить имя пользователя и пароль для формата 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<>&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).