解析经典ASP中的单个XML条目

时间:2010-09-07 19:16:46

标签: xml asp-classic vbscript

我正在尝试解析ASP经典中没有名称的单个XML条目,并且在将其解析为对象时遇到问题?

以下是我的尝试:

result = xmlDoc.selectSingleNode("//Boolean")

我也尝试过:

result = xmlDoc.selectSingleNode("//Boolean").Attributes.Text

他们都没有返回一个对象,这是我第一次使用XML而且我还没有弄清楚如何获取一个没有名字的对象。

以下是XML结果文件:

<boolean>true</boolean>

这是错误:

Microsoft VBScript runtime  error '800a01a8'

Object required: 'xmlDoc.selectSingleNode(...)' 

如何填充xmldoc:

set xmlDoc = createObject("MSXML2.DOMDocument")
xmlDoc.async = False
xmlDoc.setProperty "ServerHTTPRequest", true


url = "http://localhost:81/api/logging/Service.svc/xml/LogEvent?"

//Create the http string
url = url & "sessionId=" & sessionId
url = url & "source=" & source
url = url & "action=" & action
url = url & "parameters=" & parameters

xmlDoc.load(url)

result = xmlDoc.selectSingleNode("//Boolean")

2 个答案:

答案 0 :(得分:3)

XML区分大小写,XPath也是如此。尝试:

Set result = xmlDoc.selectSingleNode("//boolean")

另外,请注意Set语句,对象分配是必要的。

此外,您必须在继续之前检查选择操作是否成功:

If Not result Is Nothing Then
  boolValue = CBool(result.nodeValue)
End If 

CBool()了解"true""false",但会为其他字符串引发类型不匹配错误。

对于早期的MSXML版本,您还需要首先将选择语言设置为XPath。

xmlDoc.setProperty("SelectionLanguage", "XPath");

答案 1 :(得分:0)

这是我最终做的 - 而不是使用DOMDocument HTTPRequest我使用了Msxml2.ServerXMLHTTP。无论出于何种原因,我都无法使用responseXML,因为它没有作为XML返回 - 但是responseText运行得很好,因为我总是在布尔值中返回“true”或“false”。

Set objXmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")

'Build the url string
url = url & "pki=" & LOGGING_PKI
url = url & "&sessionId=" & sessionId
url = url & "&source=" & source
url = url & "&action=" & action
'Clean parameters string
parameters = Replace(parameters,"&", "%26")
url = url & "&parameters=" & parameters

' Send http request
objXmlHttp.open "GET", url, False
objXmlHttp.send

'Check response
strHTML = objXmlHttp.responseText

Set objXmlHttp = Nothing

'If responseText = true then logging was successful
if instr(strHTML, "true") <> "" then
    logEvent = true
else
    logEvent = false
end if