0

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

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

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

<?xml version="1.0"?>

那么是否有可能以编程方式告诉 XMLLite 忽略编码。我还有什么其他选择?

一种解决方案是编写我自己的输入流类并抑制此标头,并注入简短版本,但最好有一个干净的解决方案。

4

1 回答 1

0

尽管文档说 XMLLite 无法处理不同的编码,但您似乎可以通过 using 来解决这个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);
}
于 2015-10-21T09:45:56.853 回答