1

我有一个在特定机器上失败的 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(),它会以“字符串”的形式返回。因此,可能发生类型不匹配也就不足为奇了。但为什么只在那一台机器上?

正如我正在考虑的那样,该机器可能将语言环境设置为与我正在测试的其他机器不同的语言。这可能与它有关吗?VB6 是否使用语言环境来确定如何将字符串“false”强制转换为布尔值?如果是这样,有没有办法强制它使用英语?

有任何想法吗?

4

1 回答 1

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 并处理它。

于 2012-02-23T06:48:47.940 回答