我正在调用此服务,它以xml格式返回给我数据。我想从中提取服务器地址。我怎样才能做到这一点?这是我从服务部门打电话时得到的。
from xml.dom import minidom
import requests
url="http://172.10.3.2:51106/GetConnectionStrings.asmx"
#headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'text/xml'}
body = """<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
<soap:Body>
<DatabaseConnectionString xmlns='http://tempuri.org/'>
<DatabaseName>ELMA</DatabaseName>
<ApplicationName>MonitoringSystem</ApplicationName>
</DatabaseConnectionString>
</soap:Body>
</soap:Envelope>"""
response = requests.post(url,data=body,headers=headers)
#print response.content
doc = minidom.parseString(response.content)
# doc.getElementsByTagName returns NodeList
name = doc.getElementsByTagName("DatabaseConnectionStringResult")[0]
print(name.firstChild.data)
这是我到目前为止所尝试的。
Data Source=172.10.3.3;Initial Catalog=Elma;User ID=User11021969;Password=ILoveMyMOM;MultipleActiveResultSets=True;Min Pool Size=5;Max Pool Size=5000;Connect Timeout=180;Application Name=MonitoringSystem
我想提取数据源172.10.3.3并将其保存为字符串。
答案 0 :(得分:0)
我不确定“数据源172.10.33”是什么意思,因为该IP地址不会出现在文本正文的任何位置。
要从文本正文中搜索和提取信息,请使用正则表达式
body = """<?xml version='1.0' encoding='utf-8'?>
<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
<soap:Body>
<DatabaseConnectionString xmlns='http://tempuri.org/'>
<DatabaseName>ELMA</DatabaseName>
<ApplicationName>MonitoringSystem</ApplicationName>
</DatabaseConnectionString>
</soap:Body>
</soap:Envelope>"""
如果要提取URL,请使用以下代码:
import re
url = re.findall("xsi='(.*?)'", body)[0]
如果您想要数据库名称: 进口重新 databaseName = re.findall(“(。*?)”,body)[0]
这里的关键是(.*?)
之外的东西是你想要的左侧和右侧的字符串(例如你的xml标签),而(.*?)
本身意味着“提取这些信息”对我来说。“
只要您知道要查找的xml标记,就可以提取您正在使用的此服务所提供的任何内容。
函数re.findall
返回与您的描述匹配的所有内容的列表。上面的代码假设只有一件事符合您的描述,因此它只返回列表的第一个元素。