如何将STX / ETX(C0控制代码)写入BSTR缓冲区IXMLDOMElement *

时间:2012-03-14 20:12:18

标签: c++ c xml ixmldomdocument

我有一个应用程序传递一个(BSTR * ProfileXml)作为out参数。 所以我在使用SysAllocString(Profile)

分配配置文件后发送配置文件
WCHAR   Profile[] = 
L"<IhvSecurity xmlns=\"http://www.sampleihv.com/nwifi/profile\">"
L"<IHVSecurityParam2>parameter value</IHVSecurityParam2>"
L"</IhvSecurity>";

对于几乎所有ascii字符(不包括C0代码,如STX ascii代码2,ETX ascii代码3),它与paramater值一起工作正常。 一旦我发送STX或ETX中的任何一个应用程序发送错误并要求有效的xml缓冲区,我使用IXMLDOMElement方法加载配置文件缓冲区和修改缓冲区并再次保存缓冲区。 我没有提到Profile字符串缓冲区中的编码默认为utf - 8。

所以我在这里做错了或者我们不能在xml中使用STX / ETX ??? MSMXL解析器无法解析它们。或者他们某种方式/ API将其写入param缓冲区是节点。

任何帮助都会非常感激

谢谢

1 个答案:

答案 0 :(得分:1)

你说得对,you can't use control characters in XML 1.0。请参阅valid range的规范。 XML 1.1增加了对这些控制字符的支持,但我不认为MSXML支持XML 1.1。

作为一种解决方法,您可以实现某种转义方案,然后在另一端解码它。