oNode被设置为"Nothing",为什么会这样,我该如何修复?

3

我正在尝试开发一个标记(在这种情况下是运行在较大VBScript内部的代码片段),它从由第三方软件提供给Word插件的XML中返回信息,并使用书签提供参数给标记。

这里是正在发生的事情:

XmlDoc.SetProperty "SelectionLanguage", "XPath"

ReturnData = vbNullString

Public Function GetParameterXml()
    GetParameterXml = _
    "<Parameters>" & _
        "<Parameter Value='Last_Hearing' Code='L' Description='Last_Hearing' Type='Combo'>" & _
            "<Options>" & _
                "<Option Code='' Description='True' Value='True' />" & _
                "<Option Code='' Description='False' Value='False' />" & _
            "</Options>" & _
        "</Parameter>" & _
    "</Parameters>"     
End Function

Dim oNode : Set oNode = XmlDoc.SelectSingleNode("/Record/CelloXml/Integration/Case/Hearing/Setting/CourtroomMinutes/Comment")
Dim lastHearing : Set lastHearing = Parameters.Item( BookMark, "Last_Hearing" )     

If IsNull(lastHearing) Then
    lastHearing = False
End If
stop
If lastHearing.Value = "True" Then
    Dim dateNodes : Set dateNodes = XmlDoc.SelectNodes("/Record/CelloXml/Integration/Case/Hearing/Setting/HearingDate")
    Dim mostRecentHearingDate
    Dim dateNode
    Dim todaysDate
    todaysDate = Date

    Dim dateList : Set dateList = CreateObject("System.Collections.ArrayList")
    For Each dateNode In dateNodes
        dateList.Add CDate(dateNode.Text)
    Next
    dateList.Sort()

    Dim tempDate
    For Each tempDate In dateList
        If tempDate < todaysDate Then
            mostRecentHearingDate = tempDate
        End If
    Next
    mostRecentHearingDate = CStr(mostRecentHearingDate)
    Set oNode = XmlDoc.selectSingleNode("/Record/CelloXml/Integration/Case/Hearing/Setting[HearingDate/text()='" & mostRecentHearingDate & "']/CourtroomMinutes/Comment")
End If

If Not oNode Is Nothing Then
    ReturnData = oNode.text
Else
    ReturnData = vbNullString
End If

一切都按照我的意愿运行,直到...

Set oNode = XmlDoc.selectSingleNode("/Record/CelloXml/Integration/Case/Hearing/Setting[HearingDate/text()='" & mostRecentHearingDate & "']/CourtroomMinutes/Comment")

我需要dateList保存日期(或日期字面量),因为我认为如果我尝试将日期作为字符串而不是实际日期进行排序,那么排序结果会很糟糕,所以我将节点中的文本转换为日期(或日期字面量)并将其添加到dateList中。

当我完成所有计算后,我需要一个字符串在我的XPath中运行,如果我将日期(作为字符串{08/05/2014})硬编码到XPath查询中,它可以正常工作,但当我使用CStrmostRecentHearingDate转换为字符串时,oNode被设置为无效。

该节点存在并且包含数据

所以,

  • 为什么会发生这种情况?
  • 如何使它按照我想象中的方式运行?
1个回答

3

如果您执行

dim mostRecentHearingDate
mostRecentHearingDate = CDate("08/05/2014")
mostRecentHearingDate = CStr(mostRecentHearingDate)

最近的听证日期为"8/5/2014",而不是"08/05/2014",因为它省略了前导的"0"。

请尝试:

mostRecentHearingDate = Right("0"&DatePart("m",mostRecentHearingDate),2) & "/" & Right("0"&DatePart("d",mostRecentHearingDate),2) &  "/" & DatePart("YYYY",mostRecentHearingDate)

这将产生
08/05/2014

哦天啊!我简直不敢相信我没看到那个。除了那个又长又丑的字符串,难道没有其他解决方法吗? - Malachi
可能有更高效的方法,但基本上你需要在前面填充“0”。 - Gratzy
之前我尝试的是将日期字面符号(#)移除并替换为空,但那也没有起作用。 - Malachi
您没有提供XML示例,也许这会有所帮助。 - Gratzy
执行 Replace(mostRecentHearingDate, "#", "") 也会去掉零。你的答案是正确的,解决了这个问题。我看到了正确的日期,没有注意到缺少的零。谢谢。 - Malachi
你可以尝试使用FormatDateTimevbShortDate代替CStr(),但这取决于你的区域设置。FormatDateTime - oracle certified professional

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接