Здравствуйте, glina, Вы писали:
G>MSXML4 SP2 (а вот XMLSpy показывает кодировку )
Тебя кто-то ввел в заблужение. Метод transformNode возвращает строку типа BSTR в соответствии со своим прототипом. Эта строка по самому определению BSTR — в кодировке UTF-16 (а никак не Windows-1251). Поэтому кодировка и не проставляется.
Здравствуйте, glina, Вы писали:
G>кодировка не появилась
OK. Ты вывел результат преобразования в дерево. Но в самом дереве кодировка не нужна, там всегда используется UTF-16. Кодировка нужна тогда, когда ты выводишь это дело в байтовый поток.
Когда ты вызываешь метод save, он анализирует дерево и ищет в нем сигнатуру XML, замаскированную под инструкцию обработки (processing instruction) вида <?xml version="1.0" encoding="UTF-1251"?>, перед корневым элементом.
Если там указана кодировка, он принимает ее к исполнению и пишет байтовый поток в этой кодировке. Если узел инстукции обработки не найден или в нем нет указания о кодировке, он берет умолчание. В любом случае сигнатура XML попадает в вывод в том же виде.
Эту инструкцию обработки туда несложно добавить. Как это сделать, ищи на сайте.
Если бы ты выводил результат преобрабования не в дерево, а сразу в IStream, XSLT-процессор принял бы к исполнению инструкцию <xsl:output>.
Здравствуйте, achp, Вы писали:
A>Если бы ты выводил результат преобрабования не в дерево, а сразу в IStream, XSLT-процессор принял бы к исполнению инструкцию <xsl:output>.
Здравствуйте, glina, Вы писали:
G>Здравствуйте, achp, Вы писали:
A>>Если бы ты выводил результат преобрабования не в дерево, а сразу в IStream, XSLT-процессор принял бы к исполнению инструкцию <xsl:output>.
G>Т.е. к коду в предыдущем посте
G>надо добавить
G>
Ты в метод transformNodeToObject передаешь некоторый объект. Метод смотрит, что из себя этот объект представляет, вызывая для него QueryInterface: сначала он проверяет, не является ли объект документом XML DOM, и, если это так, строит в этом объекте DOM-дерево получаемого документа; если нет, то он смотрит, не поддерживает ли объект "на худой конец" интерфейс IStream, и, если так, то выводит представление итогового документа в этот объект, как поток байтов.
То есть, ты можешь туда передать не объект-документ XML DOM, а какой-то свой объект, реализующий IStream.
Здравствуйте, achp, Вы писали:
A>Нет, это вообще не то!
A>Ты в метод transformNodeToObject передаешь некоторый объект. Метод смотрит, что из себя этот объект представляет, вызывая для него QueryInterface: сначала он проверяет, не является ли объект документом XML DOM, и, если это так, строит в этом объекте DOM-дерево получаемого документа; если нет, то он смотрит, не поддерживает ли объект "на худой конец" интерфейс IStream, и, если так, то выводит представление итогового документа в этот объект, как поток байтов.
A>То есть, ты можешь туда передать не объект-документ XML DOM, а какой-то свой объект, реализующий IStream.