При выполнении load
msxml не копирует кодировку из инструкции по обработке в созданный документ. Поэтому он не содержит никакой кодировки и кажется, что msxml выбирает то, что ему нравится. В моем окружении это UTF-16, который я не предпочитаю.
Решение - предоставить инструкции по обработке и указать там кодировку. Если вы знаете, что в документе нет инструкций по обработке, код тривиален:
Set pi = xmlDoc.createProcessingInstruction("xml", _
"version=""1.0"" encoding=""windows-1250""")
If xmlDoc.childNodes.Length > 0 Then
Call xmlDoc.insertBefore(pi, xmlDoc.childNodes.Item(0))
End If
Если возможно, что документ содержал другую инструкцию обработки, он должен быть сначала удален (поэтому приведенный ниже код должен предшествовать приведенному выше). Я не знаю, как использовать selectNode
для этого, поэтому я просто перебрал все корневые узлы:
For ich=xmlDoc.childNodes.Length-1 to 0 step -1
Set ch = xmlDoc.childNodes.Item(ich)
If ch.NodeTypeString = "processinginstruction" and ch.NodeName = "xml" Then
xmlDoc.removeChild(ch)
End If
Next ich
Извините, если код не выполняется напрямую, потому что я изменил рабочую версию, написанную на что-то нестандартное, а не vbscript.