如何将对象保存到一个XML文件

gooore 2010-04-13 09:35:58
求思路,或相关文件信息皆可
...全文
364 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldmanzhao 2010-04-22
  • 打赏
  • 举报
回复
可以用TinyXML或者CMarkup,都是轻量级的XML组件,很管用。我们公司的产品界面布局的保存用的就是TinyXML。网上有很多示例,一搜一大把。
redsunxin 2010-04-22
  • 打赏
  • 举报
回复
bool SaveXml(BOOL bFlagSaveAs, CString strPath)
{
CString strFilePath = _T("");

if (bFlagSaveAs )
{
strFilePath.Format(_T("%s%s"),strPath,LANGUAGE_PROJECT_FILENAME);
}
else
{
strFilePath.Format(_T("%s%s"),GetProjectPath(),LANGUAGE_PROJECT_FILENAME);
}


CWaitCursor wati;
CComPtr<IXMLDOMDocument> pDoc;
HRESULT hr = pDoc.CoCreateInstance(__uuidof(DOMDocument));
if (FAILED(hr))
{
pDoc.Detach();
return false;
}
try
{
//设置根节点
CComPtr<IXMLDOMElement> xmlRoot ; //根节点
pDoc->createElement(BSTR(_T("FontTable")),&xmlRoot);
pDoc->appendChild(xmlRoot,NULL);

//Language节点
for (int i = 0 ; i < m_LanguageInfo_ary.GetSize() ; i++)
{
CString strLanID = _T("");
CString strLanHAlign = _T("");
CString strLanVAlign = _T("");

Language_Info info = m_LanguageInfo_ary.GetAt(i);
strLanID.Format(_T("%d"),info.iLanguageID);
strLanHAlign.Format(_T("%d"),info.HAlignStyle);
strLanVAlign.Format(_T("%d"),info.VAlignStyle);

//设置Language节点的属性
CComPtr<IXMLDOMElement> xmlLanElement;
hr = pDoc->createElement(BSTR(LANGUAGE_ITEM_LANGUAGE),&xmlLanElement);
xmlRoot->appendChild(xmlLanElement,NULL);
xmlLanElement->setAttribute(BSTR(_T("Name")) ,CComVariant(info.strLanguageName));
xmlLanElement->setAttribute(BSTR(_T("H_Align")) ,CComVariant(info.HAlignStyle));
xmlLanElement->setAttribute(BSTR(_T("V_Align")) ,CComVariant(info.VAlignStyle));
xmlLanElement->setAttribute(BSTR(_T("H_Offset")) ,CComVariant(info.H_Offset));
xmlLanElement->setAttribute(BSTR(_T("V_Offset")) ,CComVariant(info.V_Offset));

//创建Style节点
CResourceList::iterator it = info.StyleMgr.m_ResourceList.begin();
for (;it!=info.StyleMgr.m_ResourceList.end();it++)
{
CResourceItem* pStyleItem = (*it);
CComPtr<IXMLDOMElement> xmlStyleElement;
hr = pDoc->createElement(BSTR(_T("Style")),&xmlStyleElement);
xmlLanElement->appendChild(xmlStyleElement,NULL);
xmlStyleElement->setAttribute(BSTR(_T("Name")) ,CComVariant(pStyleItem->m_strResourceName));
xmlStyleElement->setAttribute(BSTR(_T("ImageFormat")) ,CComVariant(pStyleItem->m_nType));
xmlStyleElement->setAttribute(BSTR(LANGUAGE_STYLEATTR_RDT) ,CComVariant(pStyleItem->m_strRawDataType));

xmlStyleElement->setAttribute(BSTR(_T("UseTransColor")) ,CComVariant(pStyleItem->m_bUseTranColor));
DWORD dwColor = (DWORD)pStyleItem->m_TranColor;
xmlStyleElement->setAttribute(BSTR(_T("TransColor")) ,CComVariant(dwColor));
xmlStyleElement->setAttribute(BSTR(_T("C2CTbl")) ,CComVariant(pStyleItem->m_CCTableName));
xmlStyleElement->setAttribute(BSTR(_T("C2PTbl")) ,CComVariant(pStyleItem->m_CPTableName));
}
}

hr = pDoc->save(CComVariant(strFilePath));
CFormatXML::Format(strFilePath);
if (FAILED(hr))
{
pDoc.Detach();
return false;
}
pDoc.Detach();
}
catch (CFileException* e)
{
e->Delete();
pDoc.Detach();
return false;
}

return true;
}
sgzwiz 2010-04-22
  • 打赏
  • 举报
回复
为何不直接用MFC的序列化来保存对象

http://it.sohu.com/20040723/n221164254.shtml
gooore 2010-04-22
  • 打赏
  • 举报
回复
有没有简单的例子。

谢谢了
qinwei 2010-04-16
  • 打赏
  • 举报
回复
XML Serial 序列化 使用 MSXML2.dll
jameshooo 2010-04-15
  • 打赏
  • 举报
回复
支持序列化有很多方式,如果你的对象是COM组件,你可以选择实现IPersistStream[Init]、IPersistStorage、IPersistPropertyBag接口之一,如果你的对象是MFC类,可以直接实现序列化,如果是其它类型,序列化过程可以完全自定义
gooore 2010-04-15
  • 打赏
  • 举报
回复
up。。。。

求助
Eleven 2010-04-13
  • 打赏
  • 举报
回复
这个要你自己定义吧,你要定义要将该对象所属类的那些成员写入,如何组织该结结构。。。
jameshooo 2010-04-13
  • 打赏
  • 举报
回复
首先让对象支持序列化
序列化后的二进制数据使用某种编码(比如BASE64)转换成文本,如果本身就是文本则无需此步
把文本保存到XML中的CDATA节中
gooore 2010-04-13
  • 打赏
  • 举报
回复
请问你说的是不是让对象支持IStream接口?

你那里有例子吗?可不可以共享一个。非常感谢

[Quote=引用 1 楼 jameshooo 的回复:]
首先让对象支持序列化
序列化后的二进制数据使用某种编码(比如BASE64)转换成文本,如果本身就是文本则无需此步
把文本保存到XML中的CDATA节中
[/Quote]
代码下载地址: https://pan.quark.cn/s/30aac9886e4b 【汉字录入能力评估平台】是中国邮政为了增强员工汉字输入的效率与精确度而研发的一款专业化训练与考核平台。该平台主要面向中国邮政服务窗口工作人员的岗前培训,致力于保障工作人员在实际操作中能够迅速且精准地处理各类文字资料,进而优化邮政服务的效能与品质。文字录入作为邮政作业中的核心技能,在数字化时代背景下尤为重要,邮政柜员需处理大量电子化文档及电子邮件,卓越的文字输入技巧直接关联到业务流程的连贯性。该平台整合了训练与测试两大核心功能,为用户构建了一个全方位提升汉字输入技巧的环境。平台的训练模块可能具备以下特征:1. **入门级训练**:提供不同难度的汉字及词汇组合,引导用户从基础开始,逐步强化录入速度。2. **情境化模拟**:重现真实的邮政作业场景,让实践者于近似现实的工作状态下进行练习,提升环境适应力。3. **速录强化**:运用计时及计字量机制,要求用户在限定时段内尽可能多地完成汉字输入,以锻炼高速录入能力。4. **偏差修正**:系统将实时识别并反馈用户的输入偏差,协助用户纠正不良输入习惯,提升正确度。5. **定制化配置**:或许允许用户依据个人需求调整训练内容与难度,实现个性化学习路径。测试模块则可能包含以下要素:1. **标准化测试**:确立统一的标准,例如规定时间内必须完成的汉字数量或必须达到的准确率,以此衡量用户汉字输入的熟练程度。2. **表现追踪**:记载每次测试的表现,形成历史数据,使用户能够追踪自身成长轨迹。3. **绩效对比**:或许设有内部绩效排行机制,让用户了解自身在团队中的相对位置,激发竞争心态。4. **资格认证**:对于达到特定标准的用户,平台可...
内容概要:本文围绕售电市场环境下电力用户选择售电公司的行为展开深入研究,通过构建数学模型与博弈分析框架,系统探讨用户在不同电价机制、服务质量、合同条款及风险偏好等因素影响下的决策行为与选择偏好。研究采用Matlab作为仿真平台,结合实证数据或设定典型场景,运用主从博弈、多智能体模拟、优化算法等方法,模拟电力市场中多方主体之间的交互过程,重点分析售电公司定价策略、激励机制与用户响应之间的动态关系,揭示市场主体间的行为演化规律与均衡机制,旨在为电力市场化改革中的机制设计、市场监管与政策制定提供理论支撑与量化依据。; 适合人群:具备一定电力系统基础知识、微观经济学或博弈论理论背景,熟悉Matlab编程与数值仿真的科研人员、高校研究生及能源领域相关从业者。; 使用场景及目标【EI复现】售电市场环境下电力用户选择售电公司行为研究(Matlab代码实现):①掌握电力市场中用户购电行为建模与效用函数设计方法;②熟练运用Matlab实现博弈模型构建、多智能体仿真与市场均衡求解;③深入理解售电侧市场竞争机制,为售电公司制定差异化营销策略、政府设计用户激励政策及提升市场运营效率提供决策支持。; 阅读建议:此资源以Matlab代码实现为核心,建议读者结合文档说明逐步运行并调试代码,通过调整模型参数(如电价水平、服务权重、用户敏感度等)观察仿真结果的变化,深入理解模型内在逻辑与行为机理;同时鼓励在此基础上拓展至多类型用户群体、引入不确定性因素或结合实际数据进行案例验证,以增强研究的实用性与创新性。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧