2016-12-23 6 views
0

Ich habe diesen Service, den ich anrufe und es gibt mir Daten im XML-Format zurück. Ich möchte die Serveradresse daraus extrahieren. Wie kann ich das machen? Das ist, was ich bekomme, wenn ich vom Service anrufe.Wie extrahiert man Daten im XML-Format?

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) 

Dies ist, was ich bisher versucht habe.

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 

Ich möchte die Datenquelle 172.10.3.3 extrahieren und als String speichern.

+2

Was ist der Wert von "response.content"? –

+0

[Duplizieren] (http://stackoverflow.com/questions/1912434/how-do-i-parse-xml-in-python) –

+0

Versuchen 'feedparser' Modul, es ist hilfreich und bequem. – Acepcs

Antwort

0

Ich bin mir nicht sicher, was Sie unter "die Datenquelle 172.10.33" verstehen, da diese IP-Adresse nirgendwo im Textkörper erscheint.

zu suchen und Informationen aus einem Textkörper extrahieren, verwenden Sie einen regulären Ausdruck

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>""" 

Wenn Sie die URL extrahieren möchten, dann den folgenden Code verwenden:

import re 
url = re.findall("xsi='(.*?)'", body)[0] 

Wenn Sie wollte den Datenbanknamen: importieren re databaseName = re.findall ("(. *?)", Körper) [0]

Der Schlüssel hier ist, dass dünn gs außerhalb von (.*?) sind die Strings auf der linken und rechten Seite von dem, was Sie wollen (zum Beispiel Ihre xml-Tags), und die (.*?) selbst bedeutet "Extrahieren Sie diese Informationen für mich."

Solange Sie wissen, welche XML-Tags Sie suchen, können Sie alles extrahieren, was dieser Dienst Ihnen gibt. Die Funktion re.findall gibt eine Liste von allem zurück, was Ihrer Beschreibung entspricht. Der obige Code geht davon aus, dass nur eine Sache mit Ihrer Beschreibung übereinstimmt, sodass nur das erste Element der Liste zurückgegeben wird.

Verwandte Themen