2015-10-14 2 views
0

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

<?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); 
}