項目上用動易平台做新聞發布網站,動易平台是用ASP做的,期間需要根據當前登錄的用戶,取其他系統比如OA的待辦事項進行列表展示,OA組的同事給了我一個WSDL接口,百度了很多ASP調用webservice的例子,但是不是這里出錯就是那里出錯,特此記錄一下。
我要調用的webservice接口是這樣的
最開始想采用soap toolkit的做法,說是很簡單,借鑒這篇博客http://blog.csdn.net/sy_binbin/article/details/3984498
但是我用了之后,發現不報錯,但是頁面也沒反應,一片空白,然后就放棄了。
然后選擇xmlhttp發送request請求的方式,也有很多經典的例子,但是對比之后人家的參數都是可以帶入到“<username></username>”或者<password></password>”中的,我這個壓根兒就沒找到參數怎么帶,我就嘗試使用“USERSORTNAME&用戶名”的方式發送請求,
發現總是報prolog不允許有內容,這是什么錯誤呢?一直查也沒弄出個所以然,最后沒辦法就去請教大神,大神給調試了一會兒,在我錯誤的頁面打開了F12,然后發現下面的內容是這樣的
然后,大神好像忽然明白了什么,然后說請求要按照人家的這種格式寫,才對,然后我的代碼被改成了這個樣子
然后,調用webservice就成功了,返回結果
終於有反應了,然后我就屁顛屁顛的回去了。
/****************************************************************分割線***********************************************************************/
以為我用asp解析個xml的東西還是不在話下的,結果又被現實給擊敗了,我的目標是拿到todoCount中的0,
先是使用msxml2.domdocument,使用xmldoc.documentElement.selectNodes,或者getElementsByTagName(),但是不是找不到對象,就是方法不對,或者沒有默認屬性之類的,連nodevalue,nodename之類的有時候都不能使用,
然后嘗試使用了Microsoft.XMLDOM對象
set objDom=server.CreateObject("MicroSoft.XMLDom")
objDom.loadxml(xmlhttp.responseText)
objDom.documentElement.SelectSingleNode("//people/man")的方法,也是找不到對象,找不到方法什么的,我都暈菜了,
然后現將返回的數據給保存了一下發現,內容不是簡單的呈現在網頁上的返回數據,外面依然帶有請求的那些個<soapenv:Envelope>,<soapenv:Body>等標簽,網頁輸出的responseText被包含在其中了,所以直接拿viewtodo標簽拿不到,
后來才發現這都不是問題,最大的問題在於,我使用的xmldoc.documentElement.getSingleNode()方法時,沒有一級一級的往下找,意思就是使用這個方法時,要逐級的使用"/"隔開,最后是這個樣子的
objDom.documentElement.SelectSingleNode("//soapenv:Envelope/soapenv:Body/ns1:GETTODOCOUNTResponse/GETTODOCOUNTReturn").text
然后就拿到了網頁上那堆東西,然后將它再用Microsoft xmldom對象再load一下,再解析一下,就好了。
獲得屬性節點:GetAttributeNode("todoCount")
屬性節點的節點名和節點值:nodename和nodevalue
此次記錄主要兩點:1、asp調用webservice時,格式很重要。2、解析返回數據時,拿到節點很重要,如果拿不到節點,使用nodevalue,nodename,text方法時,就會提示找不到對象,沒有方法之類的錯誤,拿到之后這種錯誤就迎刃而解了。
此次記錄完畢。