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

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

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

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

<?xml version="1.0"?>

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

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

1 ответ

Решение

Хотя в документации сказано, что 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);
}
Другие вопросы по тегам