首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一台计算机上的MSXML4 IXMLDOMNode.nodeTypedValue引发类型不匹配异常

一台计算机上的MSXML4 IXMLDOMNode.nodeTypedValue引发类型不匹配异常
EN

Stack Overflow用户
提问于 2012-02-23 13:56:21
回答 1查看 1K关注 0票数 1

我有一个在特定机器上失败的VB6程序。

问题的本质是这样的代码:

代码语言:javascript
复制
'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中的定义如下:

代码语言:javascript
复制
<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“强制转换为布尔值?如果是这样,有没有办法强制它使用英语?

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-23 14:48:48

是的,许多类型转换函数和隐式转换都是区域感知的。为了在这样的情况下(特别是在XML中)实现可靠的操作,请使用:

代码语言:javascript
复制
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,并且只需要处理它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9407931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档