2012-02-23 1 views
1

У меня есть программа 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> 

Еще одна вещь.

Если я распечатаю TypeName() этого выражения .nodeTypedValue, он возвращается как «String». Поэтому неудивительно, что может возникнуть несоответствие типа. Но почему только на этой машине?

Поскольку я думаю об этом, у этой машины может быть установлен язык на другой язык, чем на других машинах, которые я тестирую. Может ли это что-то с этим делать? Использует ли VB6 локаль, как заставить строку «ложь» в логическую? Если да, есть ли способ заставить его использовать английский язык?

Любые идеи?

ответ

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 и просто иметь дело с ним.

+0

Спасибо, Боб. Разумеется, изменение языка было проблемой. Похоже, у нас есть много рефакторинга, чтобы поддерживать разные локали, так как есть много этих неявных преобразований. – Stringfellow

+0

Если вы используете соответствующий XSD, то .nodeTypedValue по-прежнему работает, однако MSXML не поддерживает весь спектр типов, поэтому вы можете столкнуться с такими проблемами, как DateTime.rfc1123. – Bob77

 Смежные вопросы

  • Нет связанных вопросов^_^