Я должен читать XML-файлы на C ++, и мы используем XMLLite
у меня проблема в том, что первая строка моего XML определяет кодировку
<?xml version="1.0" encoding="ISO-8859-15"?>
и когда я пытаюсь разобрать файл с XMLLite, я получаю сообщение об ошибке MX_E_ENCODINGSIGNATURE
, Если я удаляю часть кодирования, XML разбирает нормально.
<?xml version="1.0"?>
Таким образом, можно ли программно сказать XMLLite игнорировать кодировку или соотв. какие еще варианты у меня есть?
Одним из решений было бы написать собственный класс входного потока, подавить этот заголовок и добавить короткую версию, но было бы лучше иметь чистое решение.
Хотя в документации сказано, что 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);
}
Других решений пока нет …