用MSXML的COM载入和存储数据元素,发现一个问题...(Bug???)xml元素数据中如果有特殊字符,调用save可以,再load这个保存了的文件就会失败, 问如何令它不失败?如果我每个item都要检测字符串的有效性,才保存,那效率就太低了.可能是encoding问题,但是我无论保存文档的时候换其它编码让它保存都会出错,怎么回事?
...
m_xml.Invoke1(L"Save", &CComVariant(file_path));
...CComVariant cVt;
if( m_xml.Invoke1(L"load", &CComVariant(file_path), &cVt) >= 0 &&
cVt.boolVal == VARIANT_TRUE)
{
//OK
}...<?xml version='1.0' encoding='utf-8' ?>
<?xml version='1.0' encoding='utf-16' ?>
<?xml version='1.0' encoding='GB2312' ?>
<?xml version='1.0' ?>
<rootlist version="2.0.20">
<list title="abc">
<item desc="Rޘ" filename="help.txt"/>
</list>
</rootlist>上面xml第一行没有都出现,只是几种情况都试写而已,就是desc="Rޘ" 这个字符串替换成其它可以看到的都可以.用的是MSXML的COM的load,和save.
解决方案 »
- 求多边形外围缓冲区源码
- 高手请进!!!!!!!!!!!!!!!!!!!!!!!!!!
- LPCSTR的小问题
- 怎么将OpenGL画出的图存成文件
- 怎样处理按钮的相互控制(灰化)
- 怎么获得第二个MENU框架的菜单?
- 有谁知道类似media play 9.0的界面的思路
- [ 我是个马甲 ],北京的兄弟进来帮我看看,来的都有分!
- 如何加入单元格可输入的网格?
- 大虾,pragma pack()作用是设置包栈,怎么使用呢?为什么使用?使用它有什么好处吗?
- 下了个多线程文件传输的例子缺少FTPServer.h .cpp 和FtpClient.h .cpp几个文件
- 为什么MFC里面增加一个支持automation的类,没有生成代理/存根代码
HEX转换只能你自己来了,也不难啊,每个BYTE都%02X格式化就行了。
你都二进制数据了,哪儿还谈得上直接浏览的问题啊,HEX转换就是为了让你的文本中只有ASCII字符。还有,不能
<?xml version='1.0' encoding='utf-8' ?>
<?xml version='1.0' encoding='utf-16' ?>
<?xml version='1.0' encoding='GB2312' ?>
定义这么多种编码,只能定义一种,解释器需要编码信息对非ASCII字符进行转换的
这样做应该就没问题了。
<?xml version='1.0' encoding='utf-16' ?>
<rootlist version="2.0.20">
<list title="abc">
<item desc="R̞" filename="help.txt"/>
</list>
</rootlist>
你需要用字符实体来做。
\\x0b-\\x0c
\\x0e-\\x1f
就是每条数据都要做个filter过滤替换掉它所谓的非法字符(如果不是可编辑和跟其它做配置接口打交道,感觉没什么优势)
看来XML这类东西只适合低性能需求的实现,每个都转换,效率太低,数据如果很多行就慢了.加上我的水平又不行,代码效率又低, 还是自己写个文件结构输入输出,这个东西弄出来..对XML方案不满意结贴,呵呵...谢谢大家帮忙!!!!!!!!!!!!!!!