XMLLite 忽略编码

XMLLite ignore encoding

我必须用 C++ 读取 XML 文件,我们正在使用 XMLLite 我遇到的问题是 XML 的第一行指定了编码

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

当我尝试使用 XMLLite 解析文件时,出现错误 MX_E_ENCODINGSIGNATURE。如果我删除编码部分,XML 解析得很好。

<?xml version="1.0"?>

那么是否可以通过编程方式告诉 XMLLite 忽略编码 resp。我还有哪些其他选择?

一个解决方案是编写我自己的输入流 class 并抑制此 header,然后注入短版本,但最好有一个干净的解决方案。

尽管文档说 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);
}