为什么我能从一个XML节点获取文本而不能从其兄弟节点获取文本?

时间:2012-09-04 13:10:54

标签: xml asp-classic vbscript xmldom

为什么我能从一个XML节点获取文本而不能从其兄弟节点获取文本?我现在必须做错事,我实际上已经让它工作了一段时间,但我当时选择了错误的兄弟姐妹。下面的代码返回AND将strRespone写入我的源代码。但是我会在下一个错误中得到错误。

错误: Microsoft VBScript运行时错误“800a01a8”

需要对象

/preview.asp,第905行(行:strAuthCode = strBMLAuthCode.text)

代码:

Dim NodeList, Node, SubNode
Set NodeList = xmlDom.documentElement.selectNodes("onlineresponse/authorizationresponse")

Set strBMLResponse = xmlDom.SelectSingleNode("//response")
    strResponse = strBMLResponse.text
    Response.Write "<!--strResponse: " & strResponse & "-->"


If strResponse = "000" Then '//SUCCESS!!
    Set strBMLAuthCode = xmlDom.SelectSingleNode("//id")
        strAuthCode = strBMLAuthCode.text
        Response.Write "strAuthCode: " & strAuthCode & "<br>"


    Set strBMLAcctNum = xmlDom.SelectSingleNode("//number")
        strAcctNum = strBMLAcctNum.text
        Response.Write "strAcctNum: " & strAcctNum & "<br>"
        strCCNum = strAcctNum

Else ' if strResponse <> '000'...

没有XML: 我想出来了......把xml作为我们安全的预防措施。

谢谢!

编辑: 我很快就会发布答案。

1 个答案:

答案 0 :(得分:2)

你的匈牙利符号是可怕的。对于既是字符串又不是字符串的东西,你使用“str”前缀,即strBMLResponse不是字符串!考虑重命名您的值,如下所示:

Dim xmlResponse
Set xmlResponse = xmlDom.SelectSingleNode("//response")
Dim strResponse
strResponse = xmlResponse.text

其次,您没有错误检查,即您的代码始终假定Set始终指定有效对象。但是,在实践中可能存在返回Nothing的情况,即

If strResponse = "000" Then
    Dim xmlAuthCode
    Set xmlAuthCode = xmlDom.SelectSingleNode("//litletxnid")
    If Not (xmlAuthCode is Nothing) Then
        Dim strAuthCode
        strAuthCode = xmlAuthCode.text
        Rem ...
    End If
End If

我对您提供的XML和您提供的代码进行了一些检查,并且错误不可重现,因此,我将假设信息不足。即我猜测xmlDom的内容实际上并不包含“litletxnid”节点。您需要做一些额外的检查以确认或否认这种情况。

编辑:

感谢您提供更多信息。如前所述,我在提供信息时遇到了麻烦。这意味着需要进行更多故障排除,尤其是在litletxnid节点上进行深度分析时。您还有其他方法可以实现,例如:

Dim xmlAuthCode
Set xmlAuthCode = xmlDom.documentElement.firstChild.firstChild
Rem You can add debugging here like view xmlAuthCode.xml