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);

}

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

2013

999

<

devid>12020231001

1

03

001


需要注意的是: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

你可能感兴趣的:(C++,MFC,XML组织和解析,C++,MFC,XML)