Using OpenAPI with C++[2] _VC调用WebService

来源:互联网 发布:买一个淘宝店铺 编辑:程序博客网 时间:2024/06/07 23:26
 前面那一篇我们提到了输出Reader->RPCResult->text,如果执行不出错的话,你会发现能得到一个”TRUE”,不管你是MessageBox弹出还是用cout输出,而我们注意下返回的XML中第一个Entity是GetUserProfileResult,类型是boolean,怎么也能输出呢?boolean好像C++里面没有啊?没错,XML里面的元素其实都是字符串文本,而OpenAPI声明中的这些类型是给节点赋值的时候顺带写入的,是为了让服务器识别的,这个问题后面再说,先说说我们怎么获得返回的XML中的除了第一个节点外的值。

Reader->RPCStruct就是一个IXMLDOMNode指针其实,而MSXML中取得节点下的节点用IXMLDOMNode,取得节点列表则用IXMLDOMNodeList接口指针。在返回的GetUserProfileResponse实体下,有GetUserProfileResult和profile是并列的,那么我们就获得一个XML节点的List,0单位肯定就是GetUserProfileResult,1单元就是profile了,而profile下的第一个节点是point,也就是该CSDN ID的专家分。

整理下脉络:

<GetUserProfileResponse xmlns="http://www.csdn.net/">

  <GetUserProfileResult>boolean</GetUserProfileResult>

  <profile>

    <point>int</point>

...

  </profile>

</GetUserProfileResponse>

 

看我们是怎么通过Reader->RPCStruct获得point元素的。代码如下:

       // 显示结果

       MSXML2::IXMLDOMNode  *pXMLNode(NULL);

       MSXML2::IXMLDOMNode  *pXMLNode2(NULL);

       MSXML2::IXMLDOMNodeList *pXMLNodeList(NULL);

       BSTR str;

       Reader->RPCResult;

       //Reader->RPCStruct->get_firstChild(&pXMLNode);

       //pXMLNode->get_text(&str);

       Reader->RPCStruct->get_childNodes(&pXMLNodeList);

       hr = pXMLNodeList->get_item(1, &pXMLNode);//得到profile

       pXMLNode->get_firstChild(&pXMLNode2);

       pXMLNode2->get_text(&str);

      

cout<<_com_util::ConvertBSTRToString(str)<<endl;

 

你可以看到,专家分在命令行中打印出来了,其他我就不再多说了,各位去Google上搜索”MSXML 操作XML”就会非常清楚了我想。Tr0j4n ^_^

 

在你得到了你所以要的返回值的信息后,你需要释放资源,比如你如果使用了BSTR,那么需要::SysFreeString(&str);

收尾工作:

       Reader->Release();

       Serializer->Release();

       Connector->Release();

CoUninitialize();

仅具有以上的知识还不够应付所有的OpenAPI,下一篇中我们来一起探讨下OpenAPI中的数据类型在C++中的使用和WSDL。

 

文章出处:http://blog.csdn.net/tr0j4n/article/details/4967648

原创粉丝点击