2015-10-14 79 views
0

我要读用C XML文件++和我们使用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); 
}