我有一个在特定机器上失败的VB6程序。
问题的本质是这样的代码:
'this next line throws Type mismatch exception
If xml_file.documentElement.selectSingleNode("Node").Attributes.getNamedItem("InUse").nodeTypedValue Then
'do some stuff
End If
该程序使用MSXML4,这个问题只发生在一台机器上(到目前为止),虽然它适用于许多其他机器。此外,InUse属性在XML模式中定义如下:
<xs:attribute name="InUse">
<xs:simpleType>
<xs:restriction base="xs:boolean">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
还有一件事。
如果我打印出该.nodeTypedValue表达式的TypeName(),它将以“String”形式返回。因此,可能会出现类型不匹配,这并不奇怪。但为什么只能在那台机器上呢?
正如我在想的那样,该机器可能将Locale设置为与我正在测试的其他机器不同的语言。这可能与它有关吗? VB6是否使用语言环境确定如何将字符串“false”强制转换为布尔值?如果是这样,有没有办法强迫它使用英语?
有什么想法吗?
答案 0 :(得分:1)
是的,许多类型转换函数和隐式转换都是区域设置感知的。为了在这种情况下(特别是使用XML)可靠运行,请使用:
If LCase$(Trim$(string-expression)) = "true" Then
XML模式是相当“软”的生物。你可能想看看:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms762308(v=vs.85).aspx
基本上MSXML 4.0已经过时,不再用了。即便如此,您还需要一个XDR架构才能获得更强大的输入。从MSXML 6.0开始,不支持XDR。
实际上你应该使用.nodeValue并且只是处理它。