【问题标题】:Parse single XML entry in classic ASP在经典 ASP 中解析单个 XML 条目
【发布时间】:2010-09-10 03:26:56
【问题描述】:

我正在尝试解析 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")

【问题讨论】:

  • 如何填充xmlDoc 对象?可以发一下代码吗?

标签: xml asp-classic vbscript


【解决方案1】:

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");

【讨论】:

    【解决方案2】:

    这就是我最终要做的——我没有使用 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
    

    【讨论】:

    • 您绝对应该在“构建 url 字符串”部分的所有值上使用 Server.URLEncode()。此外,转储您正在做的自定义Replace() 并再次在parameters 上使用Server.URLEncode()。这是唯一没有错误的方法。 responseXML 属性不可用,因为很可能响应未使用 XML Content-Type 标头发送。解决这个问题,它就会工作。
    猜你喜欢
    • 2018-12-09
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多