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);
}
我必须用 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);
}