Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA访问Web服务及解析结果_Vba_Soap - Fatal编程技术网

VBA访问Web服务及解析结果

VBA访问Web服务及解析结果,vba,soap,Vba,Soap,我需要解析一个特定的节点令牌,以便在下一个API请求中使用它。我得到了下面显示的SOAP XML响应。我被这个子程序的最后一行卡住了,编译错误:参数不是可选的。一旦我设置了变量LastToken,我希望在MsgBox中看到它来验证它。似乎找不到正确的语法来解决这个问题 使用Access 2016的VBA代码 Sub InvokeAuthenticate() 'Declare our working variables Dim sMsg As String Dim sUR

我需要解析一个特定的节点令牌,以便在下一个API请求中使用它。我得到了下面显示的SOAP XML响应。我被这个子程序的最后一行卡住了,编译错误:参数不是可选的。一旦我设置了变量LastToken,我希望在MsgBox中看到它来验证它。似乎找不到正确的语法来解决这个问题

使用Access 2016的VBA代码

Sub InvokeAuthenticate()

    'Declare our working variables
    Dim sMsg As String
    Dim sURL As String
    Dim sEnv As String
    Dim LastToken As String
    'Set and Instantiate our working objects
    Set objHTTP = New MSXML2.XMLHTTP
    sURL = "http://netforum.avectra.com/xweb/netforumxmlondemand.asmx"
    'SOAP envelope for submission to the Web Service
    sEnv = "<?xml version=""1.0"" encoding=""utf-8""?>"
    sEnv = sEnv & "<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"" xmlns:ns=""http://www.avectra.com/OnDemand/2005/"">"
    sEnv = sEnv & "  <soap:Header/>"
    sEnv = sEnv & "  <soap:Body>"
    sEnv = sEnv & "     <ns:Authenticate>"
    sEnv = sEnv & "          <ns:userName>notdisplayed</ns:userName>"
    sEnv = sEnv & "          <ns:password>notdisplayed</ns:password>"
    sEnv = sEnv & "     </ns:Authenticate>"
    sEnv = sEnv & "  </soap:Body>"
    sEnv = sEnv & "</soap:Envelope>"
    'invoke the web service
    objHTTP.Open "Post", sURL, False
    objHTTP.setRequestHeader "Content-Type", "text/xml"
    objHTTP.send (sEnv)
    MsgBox objHTTP.responseText
    'below is where the trouble starts, I need syntax help

    Dim xmlDoc As New DOMDocument
    xmlDoc.Load (objHTTP.responseText)
    LastToken = xmlDoc.getElementsByTagName(Token)


End Sub
SOAP XML响应作为objHTTP.responseText成功通过:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Header>
      <AuthorizationToken soap:mustUnderstand="1" xmlns="http://www.avectra.com/OnDemand/2005/">
         <Token>7e6345ef-10c5-4b0b-9731-26db2ebdcd1d</Token>
      </AuthorizationToken>
   </soap:Header>
   <soap:Body>
      <AuthenticateResponse xmlns="http://www.avectra.com/OnDemand/2005/">
         <AuthenticateResult>http://www.avectra.com/OnDemand/2005/</AuthenticateResult>
      </AuthenticateResponse>
   </soap:Body>
</soap:Envelope>

我从工作表单元格加载XML以进行测试:

Dim oDoc As New MSXML2.DOMDocument30
Dim el As Object, txt
Dim XML As String

XML = ActiveSheet.Range("B2").Value

oDoc.validateOnParse = True
oDoc.LoadXML XML

txt = oDoc.getElementsByTagName("Token")(0).Text

Debug.Print txt '>> 7e6345ef-10c5-4b0b-9731-26db2ebdcd1d

您传递的令牌好像它是一个未声明的变量,而不是文字字符串令牌。我再次尝试将其作为文字字符串令牌传递,得到相同的消息:编译错误:参数not optionalgetElementsByTagName返回节点集合,而不是字符串。它应该类似于LastToken=xmlDoc.getElementsByTagNameToken0.nodeValueThank you Tim,尝试了该操作后出现运行时错误91:Object Variable或block Variable not set。请使用您使用的确切代码更新您的问题,并指出错误发生的位置。