xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

В MSXML теряется атрибут


Автор Сообщение
DTF
Гость




[11795] Вт Сен 04, 2007 15:13
В MSXML теряется атрибут
Здравствуйте!
Есть код:

#include <stdio.h>
#include <msxml.h>
#import "msxml.dll"
void main()
{
HRESULT hr;
CoInitialize(NULL);

IXMLDOMDocumentPtr pXD;
hr = CoCreateInstance(CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER,
IID_IXMLDOMDocument, (void**)&pXD);

_variant_t v;
v = "c:\\temp\\bug.xml";
VARIANT_BOOL res;
pXD->load(v, &res);

BSTR bs;
pXD->get_xml(&bs);

char Buf[2000];
memset(Buf, 0, 2000);
WideCharToMultiByte( CP_ACP, 0, bs, -1, (LPSTR)Buf, wcslen(bs), NULL, NULL );

printf("%s\n", Buf);
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////


Файл c:\temp\bug.xml :

<?xml version="1.0" encoding="windows-1251" ?>
<a>
<b />
</a>



В результате работы программы в xml-документе, выведенном на экран, отсутствует параметр encoding
тега xml.

Подскажите пожалуйста, что я делаю неправильно?
olpa
Любитель

Зарегистрирован: 23.04.2002
Сообщения: 981
Откуда: Санкт-Петербург
Посетить сайт автора
[11798] Ср Сен 05, 2007 05:49

Заголовок "<?xml ...?>" не считается частью XML-документа, MSXML имеет полное право его терять.
Интересующийса.
Гость




[13536] Ср Фев 04, 2009 16:46

Извиняюсь за некропостинг, а можно ссылку на стандарт, в котором написано, что декларации - это часть документа, которую парсер может не запоминать?
Fireball
Наставник

Зарегистрирован: 26.02.2008
Сообщения: 282

[13539] Чт Фев 05, 2009 02:08

Парсеры обычно загружают XML в DOM, а то, что написано в декларации, может запоминаться, как дополнительные параметры. При желании, обычно их можно вывести в результат, когда DOM будет преобразовываться обратно в XML. Думаю, что и в MSXML есть такая возможность.
Тем не менее, валидным XML документ будет и без декларации.
Кстати, декларация может быть не только <?xml ...?>, могут подключаться стили XSLT или CSS также с помощью декларации.