gSoap用dom解析xml文件,求助!

Sunkey_CS 2013-02-16 09:12:04
最近总gsoap编写了个访问公共webservice的客户端(http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?op=Translator)英文翻译
其返回类型是这样(一个XML)
<TranslatorResult>
<xsd:schema>schema</xsd:schema>xml</TranslatorResult>
</TranslatorResponse>

用gsoap的工具生成源代码后,发现返回值为
class SOAP_CMAC _ns1__TranslatorResponse_TranslatorResult
{
public:
char *xsd__schema; /* required element of type xsd:schema */
char *__any;

public:
......
};

这两个字符串实际就是返回的xml的字符串形式,请问我现在如何解析出这个字符串(xml)中的各个标签的值呢?
看了gsoap自带的dom工具,不知道如何使用,
他的例子是这样的
soap_dom_element dom;
dom.soap = soap_new1(SOAP_DOM_TREE | SOAP_C_UTFSTRING);
cin >> dom; // parse XML
if (dom.soap->error)
... // parse error
cout << dom; // display XML
......
文档说 >> 操作符作为解析操作符,可左边(cin)需要一个std::istream啊,我目前有 char *也无法转换啊
也没有找到合适的例子,请高手指教啊!这个问题纠结了好几天了~
...全文
484 1 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Sunkey_CS 2013-02-16
啊,在高手的指点下已经解决,方法如下 字符串转换必须加头文件 #include <sstream> soap_dom_element dom; dom.soap = soap_new1(SOAP_DOM_TREE | SOAP_C_UTFSTRING); istringstream(res.TranslatorResult->__any) >> dom; if (dom.soap->error) { cout << "parse error" << endl; } cout << dom; for (soap_dom_element::iterator iter = dom.begin(); iter != dom.end(); ++iter) { if ((*iter).data) { cout << "Element " << (*iter).name; cout << " = " << (*iter).data << endl; } } 将xml字符串(char *)转成流(istingstream) 就可以用 >> 进行解析了 后面的for 用来遍历解析出来的标签,经过验证,完全正确,十分方便,完全不用其他的xml解析器了 另外需要在工程中 加入dom.cpp(这个文件在gsoap目录下) 在windows平台 gsoap对于中文的支持还是有问题,本人正在研究中,也期待高手能给出好的解决方法
  • 打赏
  • 举报
回复
相关推荐
发帖
XML/XSL
加入

8854

社区成员

XML/XSL相关问题讨论专区
申请成为版主
帖子事件
创建了帖子
2013-02-16 09:12
社区公告
暂无公告