Vbscript 如何从WinHttp.WinHttpRequest对象解析中的xml?
我有一个独立的VBScript,它连接到服务器并在WinHttpRequest对象中获取响应文本(XML)。现在,我的问题是如何解析其中的XML内容。当我发布请求(strPostData)时,我需要解析响应XML。由于无法在控制台上打印输出,我在下面使用的内容无法正常工作。不过我可以输出响应文本。但我无法解析它Vbscript 如何从WinHttp.WinHttpRequest对象解析中的xml?,vbscript,xml-parsing,winhttprequest,Vbscript,Xml Parsing,Winhttprequest,我有一个独立的VBScript,它连接到服务器并在WinHttpRequest对象中获取响应文本(XML)。现在,我的问题是如何解析其中的XML内容。当我发布请求(strPostData)时,我需要解析响应XML。由于无法在控制台上打印输出,我在下面使用的内容无法正常工作。不过我可以输出响应文本。但我无法解析它 Set objWinHttp = CreateObject("WinHttp.WinHttpRequest.5.1") objWinHttp.Send(strPostData)
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>
aaa
44
您可以使用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)
我想您会遇到“运行时错误:需要对象”错误。这是由线路引起的
Set ops = xmlDoc.getElementsByTagName("Response\Status").item(0).text
只需从该行的开头删除
set
。使用XMLDOM的方法是正确的。查看我的文章,了解如何从XML输入解析特定数据的示例。您会收到什么错误消息?对不起,我说的消息是ResponseText。我现在改了问题对不起,当我说留言的时候,我指的是回复文字。我现在更改了问题,我询问了您无法将输出打印到控制台这一事实的症状。与此同时,我试图解析您的XML,并且Set ops=
给了我“需要对象”的错误,所以我发布了我的答案。我没有收到任何错误。输出只是不打印在控制台上
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