Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSXML';s loadXML即使格式良好的xml也无法加载 我在C++中在MSXML之上写了一个包装器。加载方法如下所示。 代码的问题是有时无法加载格式良好的xml_C++_Msxml - Fatal编程技术网

MSXML';s loadXML即使格式良好的xml也无法加载 我在C++中在MSXML之上写了一个包装器。加载方法如下所示。 代码的问题是有时无法加载格式良好的xml

MSXML';s loadXML即使格式良好的xml也无法加载 我在C++中在MSXML之上写了一个包装器。加载方法如下所示。 代码的问题是有时无法加载格式良好的xml,c++,msxml,C++,Msxml,在将xml作为字符串传递之前,我对xmlns进行字符串搜索,并用xmlns:dns替换所有出现的xmlns。 在下面的代码中,我删除了bom字符。然后,我尝试使用MSXML loadXML方法进行加载。如果加载成功,我将按照代码所示设置名称空间 Class XmlDocument{ MSXML2::IXMLDOMDocument2Ptr spXMLDOM; .... } //XmlDocument方法 我试着调试,但仍然不明白为什么有时loadX

在将xml作为字符串传递之前,我对xmlns进行字符串搜索,并用xmlns:dns替换所有出现的xmlns。 在下面的代码中,我删除了bom字符。然后,我尝试使用MSXML loadXML方法进行加载。如果加载成功,我将按照代码所示设置名称空间

 Class XmlDocument{

        MSXML2::IXMLDOMDocument2Ptr spXMLDOM;
         ....
    }
//XmlDocument方法

我试着调试,但仍然不明白为什么有时loadXML()甚至无法加载格式良好的XML。我在代码中做错了什么。非常感谢您的帮助

谢谢
天啊,我不是一个2BSTR的粉丝-至少你在泄漏内存,因为返回的BSTR永远不会被释放

你也可以很容易地做到

      VARIANT_BOOL bSuccess = spXMLDOM->loadXML(CComBSTR(xmltext));
这将正确处理内存


至于它失败的原因-您可以向DOMDocument询问其parseError对象IXMLDOMParseError,然后从中获取原因-这可能会进一步说明真正的问题所在。

有关此特定问题,请参阅

总的来说,xml解析器不是为内存中的字符串解析而设计的,例如loadXML不识别BOM,并且它对编码有限制。相反,xml解析器是为具有编码检测的字节数组形式设计的,这对于标准解析器来说是至关重要的。为了更好地利用MSXML,请考虑从iStRAMM或Win32文件加载。

我们使用

hr = m_pXMLDoc->load(_variant_t(xml_file.c_str()), &varStatus);
hr = m_pXMLDoc->loadXML(_bstr_t(xml_doc.c_str()), &varStatus);

分别加载文件和原始xml。

感谢Ruddy的启发,我不知道A2BSTR会导致内存泄漏,从现在起将使用CComBSTR。我将按照你提到的那样做,并试图找出原因。与你的问题并不完全相关:我试图围绕MSXML编写一个包装器,但最终放弃了,在遇到类似的问题后,我直接使用了MSXML。
      VARIANT_BOOL bSuccess = spXMLDOM->loadXML(CComBSTR(xmltext));
hr = m_pXMLDoc->load(_variant_t(xml_file.c_str()), &varStatus);
hr = m_pXMLDoc->loadXML(_bstr_t(xml_doc.c_str()), &varStatus);