我有一个在特定机器上失败的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 schema中的定义如下:
<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“强制转换为布尔值?如果是这样,有没有办法强制它使用英语?
有什么想法吗?
发布于 2012-02-23 14:48:48
是的,许多类型转换函数和隐式转换都是区域感知的。为了在这样的情况下(特别是在XML中)实现可靠的操作,请使用:
If LCase$(Trim$(string-expression)) = "true" ThenXML模式是相当“软”的生物。您可能需要查看以下内容:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms762308(v=vs.85).aspx
基本上,MSXML 4.0已经过时了,不应该再使用了。即使这样,您也需要XDR模式来获得更强的类型。从MSXML 6.0开始,不支持XDR。
实际上,您应该使用.nodeValue,并且只需要处理它。
https://stackoverflow.com/questions/9407931
复制相似问题