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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值