C++ MFC 简单读写XML

最新正在学习 用ticpp 读取XML文件,还不是很熟悉,先发一个简单的组织报文,解析报文数据,组织报文封装这一块还没做好,解析这一块已经没有什么大问题了,下面开始放代码

需要用到 ticpp类

首先需要在stdafx.h中

 #include "ticpp.h"
using namespace ticpp;

其次:组织报文

CString strTxCode = "2013";
CString strAppNo = "999"; 
CString strDevId = "12020231001";
 CString strTellerNo = "001";
 CString strType = "1"; 
CString strCardType="003";

CString m_strSendData; //要发送的数据

 ticpp::Document m_SendXMlDoc;//发送的XML对象

void SetXMLReqField(CString strTxCode, CString strAppNo, CString strDevId, CString strTellerNo, CString strType, CString strCardType){

m_SendXMlDoc.Clear(); //先清空一下
ticpp::Declaration *XMLTitle = new ticpp::Declaration("1.0", "GBK", "no"); //报文头
try
{
ticpp::Element ticppElePackage(_T("package"));
ticpp::Element ticppElePub(_T("pub"));
ticpp::Element ticppEleTxCode(_T("txcode"), strTxCode);
ticpp::Element ticppEleAppNo(_T("appno"),strAppNo);


ticpp::Element ticppEleReq(_T("req"));
ticpp::Element ticppEleDevId(_T("devid"),strDevId);
ticpp::Element ticppEleTellerNo(_T("tellerno"),strTellerNo);
ticpp::Element ticppEleType(_T("type"),strType);
ticpp::Element ticppEleCardType(_T("cardtype"),strCardType);


ticppElePub.InsertEndChild(ticppEleTxCode);
ticppElePub.InsertEndChild(ticppEleAppNo);


ticppElePackage.InsertEndChild(ticppElePub);


ticppEleReq.InsertEndChild(ticppEleDevId);
ticppEleReq.InsertEndChild(ticppEleTellerNo);
ticppEleReq.InsertEndChild(ticppEleType);
ticppEleReq.InsertEndChild(ticppEleCardType);


m_SendXMlDoc.LinkEndChild(XMLTitle);
ticppElePackage.InsertEndChild(ticppEleReq);
m_SendXMlDoc.InsertEndChild(ticppElePackage);

}

最终组织成报文数据格式为

<?xml version="1.0" encoding="GBK"?>

<package>

<pub>

<txcode>2013</txcode>

<appno>999</appno>

</pub>

<req><

devid>12020231001</devid>

<type>1</type>

<cardtype>03</cardtype>

<tellerno>001</tellerno>

</req></package>

需要注意的是:new的要用LinkEndChild 其他的对象是InsertEndChild,做法就是把下一级节点添加到上一级里面,然后二级节点,也就是本文中的pub和req添加到根节点(package)中,然后把报文头添加进去,即可


//把XML对象转换为CString

std::ostringstream os;
os << m_SendTextXMlDoc;
std::string s = os.str();
m_strSendData = s.c_str(); //把XML数据对象转换为CString


以上就是简单的组织,此作用在于熟悉XML文件


以下是解析

ticpp::Document m_RecvXMlDoc;//接收的XML对象  假设解析的对象就是上面组织的报文

m_RecvXMlDoc.Clear();

char szRecValue[1024]={0};//要解析的数据//此处解析的对象可以为char CString 等也可以是文件,也可以是一个XML对象,具体是情况而定

// m_RecvXMlDoc.LoadFile("D:\\11.tx");

m_RecvXMlDoc.Parse(szRecValue); 


ticpp::Element *pEle = m_RecvXMlDoc.FirstChildElement(); //package
ticpp::Element *pPub = pEle->FirstChildElement(); //pub
ticpp::Element *pRetCode = pPub->FirstChildElement(_T("retcode"));//retcode

        string strRetCode;
pRetCode->GetText(&strRetCode);//获取retcode



ticpp头文件和CPP文件链接:http://download.csdn.net/user/immotal_xiaoqiang

### 回答1: MFC(Microsoft Foundation Classes)是一个应用程序框架,可用于开发Windows操作系统下的C++应用程序。要实现通过MFC修改XML文件的数据,可以采用以下几个步骤: 1. 导入所需的MFC类库和头文件。 要使用MFC操作XML文件,需要在C++代码中包含afx.h头文件,并在项目设置中添加对MFC的依赖。 2. 载入XML文件。 使用MFC提供的CMarkup类或CXmlDocument类,先载入需要修改的XML文件。通过调用Load或Open方法打开XML文件并将其加载到内存中。 3. 寻找需要修改的节点。 根据XML结构,使用MFC提供的节点遍历方法或XPath表达式,在XML文件中找到需要修改的特定节点。 4. 修改节点的属性或文本内容。 通过调用MFC提供的方法,可直接修改找到的节点的属性或文本内容。例如,使用SetAttrib或SetText方法设置节点的属性或文本。 5. 保存修改后的XML文件。 通过调用Save方法或SaveToFile方法,将修改后的XML文件保存到磁盘上。 下面是一个示例代码,以MFC和CMarkup类为例,演示修改XML文件中一个特定节点的属性: ```cpp #include "stdafx.h" #include "Markup.h" using namespace std; int main() { CMarkup xml; if (xml.Load("example.xml")) // 载入XML文件 { if (xml.FindElem("book")) // 找到book节点 { xml.SetAttrib("category", "new_category"); // 修改book节点的category属性值 xml.Save("modified_example.xml"); // 保存修改后的XML文件 } xml.Close(); } return 0; } ``` 以上是一个简单的示例,可根据实际需求和XML文件的复杂程度进行相应的修改和优化。通过MFC实现修改XML文件数据需要熟悉MFC框架和XML文件的结构,掌握相关的MFC类和方法,以便灵活操作XML文件中的数据。 ### 回答2: 在MFC中实现修改XML文件数据需要使用CMarkup类。CMarkup是MFC中的一个轻量级XML解析类,可以方便地读取和修改XML文件。 首先,在程序中引入CMarkup类的头文件。 然后,使用CMarkup的Open方法打开XML文件,可以选择只读或读写模式。打开后,可以使用CMarkup的FindElem和FindChildElem方法定位到需要修改的XML元素。 接下来,使用CMarkup的SetAttrib方法可以修改元素的属性值,使用SetData方法可以修改元素的文本值。 修改完成后,使用CMarkup的Save方法保存修改后的XML文件。 以下是一个简单的示例代码: ```cpp #include <afxmarkup.h> void ModifyXMLData() { CMarkup xml; if (xml.Load("data.xml")) { if (xml.FindElem("root")) { xml.IntoElem(); // 进入root元素 while (xml.FindElem("item")) { xml.SetAttrib("attribute", "new value"); xml.SetData("new data"); } } xml.Save("data.xml"); xml.Close(); } } ``` 这段代码假设XML文件名为data.xmlXML结构如下: ```xml <root> <item attribute="old value">old data</item> <item attribute="old value">old data</item> ... </root> ``` 代码中会将所有item元素的attribute属性修改为"new value",文本值修改为"new data",然后保存修改后的XML文件。 通过以上步骤,就可以在MFC中实现修改XML文件数据了。 ### 回答3: MFC(Microsoft Foundation Classes)是一种用于开发Windows应用程序的C++框架。要实现修改XML文件数据,可以按照以下步骤进行: 1. 使用MFC提供的CFile类打开XML文件。可以使用CFile的Open函数,指定文件路径和打开模式(例如读写模式)。 2. 创建一个XML文档对象。可以使用MSXML库提供的CComPtr类,通过调用其CreateInstance函数来创建一个用于解析和修改XML的DOM文档对象。 3. 使用DOM文档对象加载之前打开的XML文件。可以使用CComPtr类的Load函数,将XML文件加载到DOM文档对象中。 4. 使用DOM文档对象进行数据修改。可以使用CComPtr类提供的各种方法和属性,来获取和修改XML文件中的数据。例如,可以使用getElementsByTagName函数获取特定元素的集合,然后通过遍历集合来修改元素的属性或内容。 5. 将修改后的数据保存XML文件。可以使用CComPtr类的Save函数,将DOM文档对象保存到同一路径的XML文件中。 6. 在完成修改后,关闭XML文件。可以使用CFile类的Close函数,关闭之前打开的XML文件。 7. 程序的其他部分需要根据具体需求进行设计,例如用户界面的布局和交互等。 总结起来,使用MFC实现修改XML文件数据的关键步骤包括:打开XML文件、创建DOM文档对象、加载XML文件、修改数据保存XML文件以及关闭文件。使用CFile类和CComPtr类可以实现这些步骤,并结合MFC的其他功能来完成个性化的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值