2

我有一个独立的 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>
4

4 回答 4

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)   
于 2012-01-12T22:03:32.560 回答
0

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

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

只需set从该行的开头删除。

于 2012-01-12T22:23:15.590 回答
0

您使用 XMLDOM 走在正确的轨道上。查看我的文章在 WSH 中读取 XML 文件以获取有关如何从 XML 输入中解析特定数据的示例。

于 2012-01-13T19:13:27.600 回答
0
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

于 2020-11-04T09:12:32.883 回答