最新正在学习 用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