Как записать XML-документ в объект, поддерживающий интерфейс istream

1. EarlyBird 7 08.04.24 07:29 Сейчас в теме
Всем привет. Вопрос по работе с XML-анализатором в 7.7.
У объекта XML-Документ есть метод Записать(), в котором предусмотрена запись в "поток, представленный интерфейсом IStream или IPersistStream"
Дословная цитата из Синтаксис-помощника:
Записать(<?>)
Синтаксис:
Записать(<Куда>)
Назначение
В случае, если Куда является строкой, ее содержимое интерпретируется, как путь к файлу, где следует сохранить XML документ. 
В случае, если Куда является COM-объектом, документ выгружается в поток, представленный интерфейсом IStream или IPersistStream. 

Подскажите плиз, как правильно создать объект, поддерживающий интерфейс IStream или IPersistStream ?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. EarlyBird 7 08.04.24 07:31 Сейчас в теме
Пробовал например вот так:
Stream = СоздатьОбъект("ADODB.Stream");
ДокументXML.Записать(Stream);

Ругается на несоответствие типов.
3. user1880116 08.04.24 08:20 Сейчас в теме
(2) ЕМНИП, 7.7 умеет хранить внутри себя и работать только с IDispatch.
Попробуй завернуть все выполнение внутрь MSScriptControl.ScriptControl, передав туда свой XML документ внешним объектом.
EarlyBird; +1 Ответить
4. EarlyBird 7 08.04.24 10:52 Сейчас в теме
(3) Попробовал через скрипт
ТекстСкрипта = "
|Const adTypeText = 2
|
|Function TextXML()
|	Set objStream = CreateObject(""ADODB.Stream"")
|
|	With objStream
|		.Type = adTypeText
|		.Open
|	End With
|
|	XMLDocument.Save(objStream)
|
|	TextXML = objStream.Read
|End Function
|";

Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "vbscript";
Скрипт.AddObject("XMLDocument", ДокументXML);
Скрипт.AddCode(ТекстСкрипта);

ТекстXML = Скрипт.CodeObject.TextXML();
Показать


Не получилось, выдаёт ошибку: ADODB.Stream: Операция не допускается в данном контексте
6. user1880116 08.04.24 11:09 Сейчас в теме
(4)
Не получилось, выдаёт ошибку: ADODB.Stream: Операция не допускается в данном контексте
Так у тебя поток не в том состоянии, чтобы из него читать. Ты там разные Mode и Position поставь что-ли?
EarlyBird; +1 Ответить
7. EarlyBird 7 08.04.24 12:24 Сейчас в теме
(6) Спасибо! Чуть попозже (ближе к вечеру) сяду покручу.
5. EarlyBird 7 08.04.24 11:02 Сейчас в теме
Пока использовал другой способ получения текста XML, с помощью стандартного метода ПредставлениеXML().
Не совсем красиво, но в моём случае этого хватит (у меня xml-ки будут небольшие по размеру)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот