如何以XML格式提取数据?

时间:2016-12-23 09:56:23

标签: python xml

我正在调用此服务,它以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并将其保存为字符串。

1 个答案:

答案 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返回与您的描述匹配的所有内容的列表。上面的代码假设只有一件事符合您的描述,因此它只返回列表的第一个元素。