我在 c++ 中的 MSXML 之上编写了一个包装器。加载方法如下所示。代码的问题是有时无法加载格式正确的 xml。
在将 xml 作为字符串传递之前,我对 xmlns 进行字符串搜索并将所有出现的 xmlns 替换为 xmlns:dns。在下面的代码中,我删除了 bom 字符。然后我尝试使用 MSXML loadXML 方法加载。如果加载成功,我将设置命名空间,如代码所示。
Class XmlDocument{
MSXML2::IXMLDOMDocument2Ptr spXMLDOM;
....
}
// XmlDocument 方法
void XmlDocument::Initialize()
{
CoInitialize(NULL);
HRESULT hr = spXMLDOM.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if ( FAILED(hr) )
{
throw "Unable to create MSXML:: DOMDocument object";
}
}
bool XmlDocument::LoadXml(const char* xmltext)
{
if(spXMLDOM != NULL)
{
char BOM[3] = {0xEF,0xBB,0xBF};
//detect unicode BOM character
if(strncmp(xmltext,BOM,sizeof(BOM)) == 0)
{
xmltext += 3;
}
VARIANT_BOOL bSuccess = spXMLDOM->loadXML(A2BSTR(xmltext));
if ( bSuccess == VARIANT_TRUE)
{
spXMLDOM->setProperty("SelectionNamespaces","xmlns:dns=\"http://www.w3.org/2005/Atom\"");
return true;
}
}
return false;
}
我试图调试仍然无法理解为什么有时 loadXML() 甚至无法加载格式良好的 xml。我在代码中做错了什么。任何帮助是极大的赞赏。
谢谢JeeZ