2016-12-23 6 views
0

私はこのサービスを呼び出しており、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を抽出して文字列として保存します。

+2

'response.content'の値は何ですか? –

+0

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

+0

'feedparser'モジュールを試してみてください。便利で便利です。 – Acepcs

答えて

0

「データソース172.10.33」の意味がわからないのは、そのIPアドレスがテキスト本文のどこにも表示されないためです。あなたがいる場合

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

URLを抽出したい場合は、次のコードを使用し、正規表現

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

を使用し、検索およびテキストの本体から情報を抽出するには インポートre databaseName = re.findall( "(。*?)"、body)[0]

ここで重要なのは、その薄いことです(.*?)の外側にあるgsは、あなたの望むもの(例えばあなたのxmlタグ)の左右の文字列であり、(.*?)自体は "この情報を私のために抽出する"という意味です。

あなたが探しているXMLタグが分かっている限り、使用しているこのサービスが提供するものをすべて抽出できます。 関数re.findallは、あなたの説明に一致するすべてのリストを返します。上記のコードでは、あなたの説明に一致するものが1つしかないと仮定しているため、リストの最初の要素だけが返されます。

関連する問題