LoadXML是MS提供的XMLDom接口中的一个函数,用于将字符串载入一个XML document,该函数的使用存在很多注意事项,在近来的开发调用中总结出以下几点:
1、字符串必须是一个完整的xml document或者well-formed的片段,否则会出现异常退出的错误。常在编程中,因内存分配不足等原因,使的传入的字符串于某处意外截断,尤其当字符串过长时,该错误不易发现。调试状态下,可通过获取字符串的长度后对末尾部分观察来判断,对较短的片段,可简单的将字符串复制到Altova Spy等专用xml编辑器中观察是否well-formed.
2、 LoadXML 方法总是采用只在 UCS-2 或 UTF-16 中编码的 Unicode BSTR,所以当字符串是UTF-8编码格式时,需要首先对其进行转换,才能够传入函数,否则即使该函数成功执行,后续对dom结构中内容的访问也会出现错误,尤其是出现中文乱码的情况.
3、参数是
BSTR类型,当string长度过长时,如果通过强制转换 (_bstr_t)str传入函数,则在转换时会出现overflow的异常,故正确的方法是先利用AllocSysString将CString转换为BSTR,再传入函数。
4、若采用Load方法根据本地文件路径获取xml document,则当原始字符串存入目标文件时,或根据系统编码类型对文件编码,故存在要点2的隐患,这是该方法比Load方法优势的地方。
目前程序出现的问题暂都是由这几个原因造成。未来出现新问题时再做补充!