特定のマシンで失敗しているVB6プログラムがあります。MSXML4 IXMLDOMNode.nodeTypedValue throwingあるマシンでタイプの不一致例外が発生する
'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>
もう1つ。
その.nodeTypedValue式のTypeName()を出力すると、「文字列」として返されます。タイプミスマッチが発生する可能性があることはひどく驚くことではありません。しかし、なぜそのマシンにしかないのですか?
私はそれについて考えているので、そのマシンは私がテストしている他のマシンとは異なる言語にロケールを設定しているかもしれません。それはそれと関係がありますか? VB6はロケールを使用して文字列 "false"をブール値に変換する方法を決定しますか?もしそうなら、それを強制的に英語を使う方法はありますか?
アイデア?
ありがとう、Bob。確かに、ロケールの変更が問題でした。これらの暗黙的な変換がたくさんあるので、さまざまなロケールをサポートするために行うリファクタリングがたくさんあるようです。 – Stringfellow
適切なXSDを使用すると、.nodeTypedValueは引き続き動作しますが、MSXMLではすべての種類のタイプがサポートされないため、dateTime.rfc1123アイテムなどのクラッシュが発生する可能性があります。 – Bob77