Что нового

Различия при использовании COM-объектов MsXML в AutoIt и VBS

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Привет.

Нашёл VBScript который загружает xml-файл, сверяет его содержимое с :rofl:r-файлом (:rofl:R-Schema) и в зависимости от совпадения показывает содержимое xml-файла или выдаёт ошибку.

Код:
set xmldoc = CreateObject("Msxml2.FreeThreadedDOMDocument")
set SchemaCache = CreateObject("Msxml2.XMLSchemaCache")

xmldoc.async = False
xmldoc.validateOnParse = True

SchemaCache.Add "x-schema:books", "collection.xdr"
Set xmldoc.schemas = SchemaCache

xmldoc.Load("collection.xml")
If (xmldoc.parseError.errorCode <> 0) Then
   Set myErr = xmldoc.parseError
   MsgBox (myErr.reason)
Else
   MsgBox xmldoc.xml
End If
Код:
<?xml version='1.0'?>
<Collection xmlns="x-schema:books">
   <Book>
      <Title>Lover Birds</Title>
      <Author>Cynthia Randall</Author>
      <Publisher>Lucerne Publishing</Publisher>
   </Book>
</Collection>
Код:
<?xml version="1.0"?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data">
  <!-- AttributeType name="xmlns" -->
  <ElementType name="Title"/>
  <ElementType name="Author"/>
  <ElementType name="Publisher"/>
  <ElementType name="Book" model="closed">
     <element type="Title"/>
     <element type="Author"/>
     <element type="Publisher"/>
  </ElementType>
  <ElementType name="Collection" model="closed">
     <element type="Book"/>
  </ElementType>
</Schema>

Попробовал переписать этот скрипт на AutoIt:
Код:
$xmldoc = ObjCreate('Msxml2.FreeThreadedDOMDocument')
$SchemaCache = ObjCreate('Msxml2.XMLSchemaCache')

$xmldoc.async = False
$xmldoc.validateOnParse = True

$SchemaCache.Add('x-schema:books', 'collection.xdr')
$xmldoc.schemas = $SchemaCache

$xmldoc.load('collection.xml')
If $xmldoc.parseError.errorCode <> 0 Then
	$myErr = $xmldoc.parseError
	MsgBox(16, '', $myErr.reason)
Else
	MsgBox(0, '', $xmldoc.xml)
EndIf

Пока xml-файл правильный, проблем не возникает.

Если в нём изменить например "<Collection>...</Collection>" на "<Collections>...</Collections>", VBS выдаст ошибку, AutoIt промолчит.
Если изменить только "<Collection>" на "<Collections>" VBS и AutoIt выдают разные ошибки.

Интересно почему и как бы это исправить?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
dwerf [?]
Интересно почему и как бы это исправить?
Поправьте:
Код:
$xmldoc.async = 0
$xmldoc.validateOnParse = 1

или так:
Код:
$xmldoc.async = 'False'
$xmldoc.validateOnParse = 'True'
 
Автор
D

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
Работает. Чем же ему boolean'ы не нравились?
 
Верх