我对GSOAP并不熟悉,所以这里可能缺少一些显而易见的东西。但我真的无法在GSOAP文档中找到它的解决方案。
我需要知道,如何在不影响其他节点的情况下,悄然忽略GSOAP中的xml中的未知节点。
例如:我有低年级学生。
class gsoap_ex
{
int foo;
char bar;
}下面是它的XML:
<gsoap_ex>
<foo>foo_value</foo>
<unknown>unknown_value</unknown>
<bar>bar_value</bar>
</gsoap_ex>到目前为止,我的gsoap解析xml直到它到达未知节点,然后它返回,而不需要进一步解析它。
print_after_parsing(gsoap_ex *obj)
{
cout<<obj->foo;
cout<<obj->bar;
}因此,在我的上述函数中,它显示foo的值,但未设置bar的值。
我怎样才能做到这一点?
发布于 2015-04-10 15:13:02
您可以配置gSOAP以提供一个函数指针来处理未知的元素,并让您的函数决定如何处理它。
https://www.cs.fsu.edu/~engelen/soapfaq.html页面讨论如何处理未知数据。这一段的第一部分是关于检测意外数据,以便您可以知道如何处理这个问题;似乎您已经了解了这一点,所以我只包含了详细介绍如何更改gSOAP行为的部分。
当接收到SOAP/消息时,我的代码似乎忽略了数据。如何在运行时检测无法识别的元素标记并让应用程序出错? ..。 另一种控制未知元素删除的方法是定义fignore回调。例如: { struct;soap_init(& soap );soap.fignore = mustmatch;//覆盖默认回调.soap_done(& soap );//重设回调} int必须匹配(struct *soap,const * tag ) {返回SOAP_TAG_MISMATCH;//每个标记必须处理} 标记参数包含违规的标记名。您还可以选择性地返回一个错误: int必须匹配(struct soap *soap,const char * tag ) { //命名空间"ns“中以"login”开头的所有标记都是可选的,如果(soap_match_tag(soap,tag,“ns:login*”)返回SOAP_OK;//必须理解(处理)返回SOAP_TAG_MISMATCH;}
想必,您会想要编写这样一个回调,为您的意外数据返回SOAP_OK。
https://stackoverflow.com/questions/29512971
复制相似问题