xml转c 语言结构体,struct 互转 xml

/** struct2xml.c */

#include

#include

#include "soapStub.h"

#include "soapH.h"

#include "nsmap.h"

/**

* struct2xml: transfer struct to xml

* strname: the struct name

* strvar: a struct instance name

* xmlbuf: buffer store the result

* buflen: buffer size

*/

#define struct2xml(strname,strvar,xmlbuf,buflen)\

do {\

struct soap soap = {0};\

struct strname *param = &strvar;\

int pfd[2];\

if (pipe(pfd))\

break;\

soap_init(&soap);\

soap.sendfd = pfd[1];\

soap_write_PointerTo##strname(&soap,(struct strname * const*) &param); \

read(pfd[0],buflen - 1);\

close(pfd[0]);\

close(pfd[1]);\

soap_destroy(&soap);\

soap_end(&soap);\

soap_done(&soap);\

} while (0)

int main(int argc,char *argv[])

{

struct RequestUpdate req = {0};

snprintf(req.Action,sizeof(req.Action),"%s","Action");

snprintf(req.Auth.Username,sizeof(req.Auth.Username),"Username");

snprintf(req.Auth.Password,sizeof(req.Auth.Password),"Password");

snprintf(req.Auth.Createtm,sizeof(req.Auth.Createtm),"Createtm");

snprintf(req.Auth.Nonce,sizeof(req.Auth.Nonce),"Nonce");

snprintf(req.DevInfo.Product,sizeof(req.DevInfo.Product),"Product");

snprintf(req.DevInfo.Firmware,sizeof(req.DevInfo.Firmware),"Firmware");

snprintf(req.DevInfo.SN,sizeof(req.DevInfo.SN),"SN");

char xmldata[2048] = {0};

int xmlsize = sizeof(xmldata);

struct2xml(RequestUpdate,req,xmldata,sizeof(xmldata));

printf("%s\n",xmldata);

return 0;

}

/** xml2struct.c */

#include

#include

#include "soapStub.h"

#include "soapH.h"

#include "nsmap.h"

/**

* xml2struct: transfer xml to struct

* strname: the struct name

* strvar: a struct instance name

* xmlbuf: xml string

*/

#define xml2struct(strname,xmlbuf)\

do {\

struct soap soap;\

int pfd[2];\

if (pipe(pfd))\

break;\

write(pfd[1],strlen(xmlbuf));\

soap_init(&soap);\

soap_begin(&soap);\

soap.recvfd = pfd[0];\

soap_begin_recv(&soap);\

if (!soap_get_##strname(&soap,&strvar,NULL,NULL))\

memset(&strvar,sizeof(struct strname));\

soap_end_recv(&soap);\

soap_destroy(&soap);\

soap_end(&soap);\

soap_done(&soap);\

close(pfd[0]);\

close(pfd[1]);\

} while (0)

int main()

{

char *xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\nActionUsernamePasswordCreatetmNonceProductFirmwareSN";

struct RequestUpdate req = {0};

xml2struct(RequestUpdate,xmldata);

printf("%s,%s,%s\n",req.Action,req.Auth.Username,req.Auth.Password,req.Auth.Createtm,req.Auth.Nonce,req.DevInfo.Product,req.DevInfo.Firmware,req.DevInfo.SN);

return 0;

}

如果这段代码对你有用, 请帮我顶一个赞

完整代码查看: https://github.com/willalways/struct-xml

总结

以上是编程之家为你收集整理的struct 互转 xml全部内容,希望文章能够帮你解决struct 互转 xml所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值