Как создать soap_dom_element, чтобы назначить его __any с gSOAP в C? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь портировать эти строки C ++ на C с библиотекой gSOAP:

trt__Capabilities *capabilities = ctx->getMediaServiceCapabilities(this->soap);
tds__GetServicesResponse.Service.back()->Capabilities->__any = soap_dom_element(this->soap, NULL, "trt:Capabilities", capabilities, capabilities->soap_type());

Я думал, что это будет сделано, но мыло_dom_element не может использоваться таким образом в API C gSOAP

tds__GetServicesResponse->Service[1].Capabilities->__any = soap_dom_element(soap, NULL, "trt:Capabilities", capabilities, SOAP_TYPE__tds__Service_Capabilities);

Еще одна вещь, которую я пытался скомпилировать, но сбой во время выполнения

struct trt__Capabilities *capabilities = fillServiceCapabilities(ctx, soap);
char * tag = "trt:Capabilities";
char * type = "";
int id = -1;
soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, capabilities, 
    SOAP_TYPE_trt__Capabilities), type);
void * elt =  soap_element_end_out(soap, tag);
soap_add_elt(&tds__GetServicesResponse->Service[1].Capabilities->__any, elt);

Пожалуйста, кто-нибудь поможет мне найти правильный способ создания нового элемента dom и назначить его объекту "struct soap_dom_element __any".

Спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Все, что вам нужно сделать, это просто установить элемент __any в динамически выделенный узел DOM с soap_elt_new:

tds__GetServicesResponse->Service[1].Capabilities->__any = soap_elt_new(soap, NULL, "trt:Capabilities”);

, а затем установить сериализуемые значения "node" и "type" дляэтот DOM-узел к сериализуемым данным C capabilities типа tds__Service_Capabilities:

soap_elt_node(tds__GetServicesResponse->Service[1].Capabilities->__any, capabilities, SOAP_TYPE__tds__Service_Capabilities);

Это сериализует capabilities как элемент <trt:Capabilities>.

См. Документацию gsoap C DOM API .

РЕДАКТИРОВАТЬ : я имел в виду soap_elt_node вместо soap_dom_node, как исправлено выше.

...