struct 互转 xml
发布时间:2020-12-16 05:55:18 所属栏目:百科 来源:网络整理
导读:/** struct2xml.c */#include stdio.h#include unistd.h#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 re
/** struct2xml.c */ #include <stdio.h> #include <unistd.h> #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*) ¶m); 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("%sn",xmldata); return 0; }
/** xml2struct.c */ #include <stdio.h> #include <string.h> #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"?>n<RequestUpdate><Action>Action</Action><Auth><Username>Username</Username><Password>Password</Password><Createtm>Createtm</Createtm><Nonce>Nonce</Nonce></Auth><DevInfo><Product>Product</Product><Firmware>Firmware</Firmware><SN>SN</SN></DevInfo></RequestUpdate>"; struct RequestUpdate req = {0}; xml2struct(RequestUpdate,xmldata); printf("%s,%s,%sn",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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |