XMLLite игнорировать кодировку

Я должен читать XML-файлы на C ++, и мы используем XMLLite у меня проблема в том, что первая строка моего XML определяет кодировку

<?xml version="1.0" encoding="ISO-8859-15"?>

и когда я пытаюсь разобрать файл с XMLLite, я получаю сообщение об ошибке MX_E_ENCODINGSIGNATURE, Если я удаляю часть кодирования, XML разбирает нормально.

<?xml version="1.0"?>

Таким образом, можно ли программно сказать XMLLite игнорировать кодировку или соотв. какие еще варианты у меня есть?

Одним из решений было бы написать собственный класс входного потока, подавить этот заголовок и добавить короткую версию, но было бы лучше иметь чистое решение.

0

Решение

Хотя в документации сказано, что XMLLite не может обрабатывать различные кодировки, кажется, что вы можете обойти это, используя IMultiLanguage2, что упоминается в документации, но не приводится пример.

Вот как это сделать:

#include <mlang.h>

XMLLiteReader::XMLLiteReader(void)
{
mLanguage = NULL;
mXMLLiteReader = NULL;
mCOMInitialized = false;

HRESULT hr;
if(CoInitialize(NULL) != S_OK)
return;
mCOMInitialized = true;

if((hr = CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_ALL, IID_IMultiLanguage2, (void **)&mLanguage)) != S_OK)
return;

hr = CreateXmlReader(__uuidof(IXmlReader), (void**) &mXMLLiteReader, NULL);
if(hr != S_OK)
{
mXMLLiteReader = NULL;
return;
}

hr = mXMLLiteReader->SetProperty(XmlReaderProperty_MultiLanguage, (LONG_PTR)mLanguage);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]