【问题标题】:how to parse xml in from a WinHttp.WinHttpRequest object?如何从 WinHttp.WinHttpRequest 对象解析 xml?
【发布时间】:2012-01-12 21:49:16
【问题描述】:

我有一个独立的 VBScript,它连接到服务器并在 WinHttpRequest 对象中获取响应文本(作为 XML)。现在,我的问题是如何解析其中的 XML 内容。当我发布请求(strPostData)时,我需要解析响应 XML。我在下面使用的内容不起作用,因为我无法在控制台上打印输出。不过,我能够输出 ResponseText。但我无法解析它。

  Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
  objWinHttp.Send(strPostData)
  objWinHttp.WaitForResponse()

    If objWinHttp.Status = "200" Then
        GetDataFromURL = objWinHttp.ResponseText
        Set xmlDoc = CreateObject("Microsoft.XMLDOM")
        xmlDoc.loadXML(GetDataFromURL)
        Set ops = xmlDoc.getElementsByTagName("Response\Status").item(0).text


      WScript.Echo "Output is: " & ops
      WScript.Echo "Message: " & GetDataFromURL
      Msgbox GeteDataFromURL
      WScript.Quit(0)   

这里是要解析的 XML:

<RCTRequest>
    <Response>
       <Name>aaa</Name>
       <Status>44</Status>
    </Response>
</RCTRequest>

【问题讨论】:

  • 你得到什么错误信息?
  • 对不起,当我说消息时,我指的是 ResponseText。我现在改了问题

标签: vbscript xml-parsing winhttprequest


【解决方案1】:

你可以使用 XPath

  Set xmlDoc = CreateObject("Microsoft.XMLDOM")
  xmlDoc.async = false
  xmlDoc.SetProperty "SelectionLanguage", "XPath"      
  xmlDoc.loadXML(GetDataFromURL)
  Set ops =xmlDoc.SelectSingleNode("/RCTRequest/Response/Status")
  WScript.Echo "Output is: " &  (ops.text)
  WScript.Echo "Message: " & GetDataFromURL
  Msgbox GeteDataFromURL
  WScript.Quit(0)   

【讨论】:

    【解决方案2】:

    我想您会收到“运行时错误:需要对象”错误。是线路造成的

    Set ops = xmlDoc.getElementsByTagName("Response\Status").item(0).text
    

    只需从该行的开头删除set

    【讨论】:

    • 对不起,当我说消息时,我指的是 ResponseText。我现在改了问题
    • 我询问了您无法将输出打印到控制台这一事实的症状。与此同时,我尝试解析您的 XML,Set ops = 给了我“需要对象”错误,所以我发布了我的答案。
    • 我没有收到任何错误。输出只是没有打印在控制台上
    【解决方案3】:

    您在使用 XMLDOM 时走在了正确的轨道上。查看我的文章Reading XML Files in WSH,了解如何从 XML 输入中解析特定数据的示例。

    【讨论】:

      【解决方案4】:
      strFile = "inp.xml"
      Set objFS = CreateObject( "Scripting.FileSystemObject" )
      set xmlDoc=CreateObject("Microsoft.XMLDOM")
      xmlDoc.async="false"
      xmlDoc.load(strFile)
      For each x in xmlDoc.documentElement.attributes
        WScript.Echo x.nodeName, x.text
      Next
      
      set xmlCol = xmlDoc.documentElement.childNodes
      For Each Elem In xmlCol 
       If StrComp(Elem.nodeName, "p") = 0 Then
        set nestedChild = Elem.childNodes
      
        For Each node In nestedChild 
          If StrComp(node.nodeName, "XYZ") = 0 Then
            WScript.Echo Elem.xml
            set a = objFS.CreateTextFile("testfile.txt", true)
            a.WriteLine(Elem.xml)
            a.Close()
          End If
        Next
      
       End If
      Next
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-29
        • 2012-02-11
        • 2014-07-30
        • 2012-07-06
        • 1970-01-01
        • 2015-09-12
        相关资源
        最近更新 更多