[英]How to print “hello world” to console
我有一個設置為從外部服務器接收SOAP消息的SOAP服務器。 我希望能夠處理這些消息。 由於服務器中的這兩行代碼,我能夠在控制台中看到消息:
logging.basicConfig(level=logging.INFO)
logging.getLogger('spyne.protocol.xml').setLevel(logging.DEBUG)
無論如何,我可以將此消息轉換為字符串,然后轉換為對象實例嗎? 我知道這不是Python語言,最好的方法是設置一個與服務器WSDL匹配的WSDL,但這超出了我的編程能力,目前還沒有一個WSDL解析器庫可供我使用。
我想從控制台中顯示的外部服務器處理的示例消息。
<Item xsi:type="Dp_Data">
<UCPTname>Net/MB485/MAIN POWER/Fb/PowerSum</UCPTname>
<UCPTlastUpdate>2014-04-04T13:34:17.441-04:00</UCPTlastUpdate>
<UCPTformatDescription>#0000000000000000[0].SNVT_power_f#SI</UCPTformatDescription>
<UCPTvalue LonFormat="#0000000000000000[0].SNVT_power_f#SI">9330.949</UCPTvalue>
<UCPTpointStatus>AL_OFFLINE</UCPTpointStatus>
<UCPTpriority>255</UCPTpriority>
<UCPTpropagate>0</UCPTpropagate>
</Item>
我想將此消息轉換為字符串,然后將其轉換為對象實例,其中的項目將具有UCPTname,UCPTlastUpdate,UCPTvalue等屬性。
請回復。
這是完整的消息:
DEBUG:spyne.protocol.xml:[1;32mMethod request string:[0m {http://wsdl.echelon.com/web_services_ns/ilon100/v4.0/message/}Write
DEBUG:spyne.protocol.xml:<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<p:messageProperties xmlns:p="http://wsdl.echelon.com/web_services_ns/ilon100/v4.0/message/">
<p:UCPTtimeStamp>2014-04-04T15:38:03.641-04:00</p:UCPTtimeStamp>
<p:UCPTuniqueId>03000029B512</p:UCPTuniqueId>
<p:UCPTipAddress>10.217.247.36</p:UCPTipAddress>
<p:UCPTport>80</p:UCPTport>
<p:UCPTlastUpdate>2014-04-04T19:38:03Z</p:UCPTlastUpdate>
</p:messageProperties>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<Write xmlns="http://wsdl.echelon.com/web_services_ns/ilon100/v4.0/message/">
<iLonItem><Item xsi:type="Dp_Data">
<UCPTname>Net/MB485/MAIN POWER/Fb/PowerSum</UCPTname>
<UCPTlastUpdate>2014-04-04T15:37:33.891-04:00</UCPTlastUpdate>
<UCPTformatDescription>#0000000000000000[0].SNVT_power_f#SI</UCPTformatDescription>
<UCPTvalue LonFormat="#0000000000000000[0].SNVT_power_f#SI">95860.3</UCPTvalue>
<UCPTpointStatus>AL_NO_CONDITION</UCPTpointStatus>
<UCPTpriority>255</UCPTpriority>
<UCPTpropagate>1</UCPTpropagate>
</Item>
</iLonItem>
</Write>
</SOAP-ENV:Body>
您應該安裝SoapPy (請注意,不要安裝Soapy),並查看SOAP定義的可能類型( 此處 )。
然后,您可以像這樣解析您的消息:
#!/usr/bin/env python
# http://stackoverflow.com/questions/22869427/how-to-print-hello-world-to-console
import SOAPpy
import logging
logging.getLogger().setLevel(logging.DEBUG)
item_str='<?xml version="1.0" encoding="utf-8"?>\
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" \
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">\
<soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">\
<Item xsi:type="Dp_Data">\
<UCPTname>Net/MB485/MAIN POWER/Fb/PowerSum</UCPTname>\
<UCPTlastUpdate>2014-04-04T13:34:17.441-04:00</UCPTlastUpdate>\
<UCPTformatDescription>#0000000000000000[0].SNVT_power_f#SI</UCPTformatDescription>\
<UCPTvalue LonFormat="#0000000000000000[0].SNVT_power_f#SI">9330.949</UCPTvalue>\
<UCPTpointStatus>AL_OFFLINE</UCPTpointStatus>\
<UCPTpriority>255</UCPTpriority>\
<UCPTpropagate>0</UCPTpropagate>\
</Item>\
</soap:Body>\
</soap:Envelope>'
expected = { 'Item': {
'UCPTname': (SOAPpy.NS.XSD, "string"),
'UCPTlastUpdate': (SOAPpy.NS.XSD, "dateTime"),
'UCPTpriority': (SOAPpy.NS.XSD, "unsignedByte"),
'UCPTpropagate': (SOAPpy.NS.XSD, "boolean"),
}}
item = SOAPpy.parseSOAPRPC(item_str, rules=expected)
logging.debug("Name: %s" % item['UCPTname'])
logging.debug("Last update: %s" % (item['UCPTlastUpdate'],))
logging.debug("Priority: %s" % item['UCPTpriority'])
logging.debug("Should this be propagated? %s" % ('Yeep' if item['UCPTpropagate'] else 'Nopes'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.