gpt4 book ai didi

c++ - gsoap : how to solve namespace error when referencing a group

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:56 36 4
gpt4 key购买 nike

我有两个 xsd 文件“hardware.xsd”和“GPU.xsd”,它们都具有不同的目标命名空间,并且都符合 elementFormDefault 条件。

xmlns:hardware="urn:hardware"和 xmlns:gpu="urn:gpu"。

硬件.xsd

<xsd:complexType name="ComputerSettings">
<xsd:sequence>
<xsd:group ref="gpu:myGPU"/>
...
</xsd:sequence>
</xsd:complexType>

GPU.xsd

<xsd:group name="myGPU">
<xsd:sequence>
<xsd:element name="Frequence" type="xsd:string"/>
<xsd:element name="DedicatedMemory" type="xsd:string"/>
</xsd:sequence>
<xsd:group/>

对于这两个文件,gsoap 模式导入器生成一个 ComputerSettings 类,具有 Frequence 和 DedicatedMemory 属性,但他没有在它们前面加上 gpu 前缀。所以当我发送我的请求然后以硬件前缀结束时,我得到一个命名空间不匹配。

当我删除组并仅声明 Frequence 和 DedicatedMemory 这两个元素时,在其他文件中我一一引用这两个元素时,它完美地工作。命名空间前缀显示在头文件中。

在这种情况下,我可以替换组引用,但我有一个情况,在同一目标命名空间中有多个同名元素。所以该小组在这里创建了一种子命名空间。因此我能够引用正确的元素。

是gsoap工具的问题,还是有解决办法?

感谢您的帮助。

更新

header.h(带组引用)

 class hardware__ComputerSettings{ 
public:
// BEGIN GROUP <xs:group name="myGPU">
/// Element "Frequence" of XSD type xs:string.
std::string Frequence 1; ///< Required element.
/// Element "DedicatedMemory" of XSD type xs:string.
std::string DedicatedMemory 1; ///< Required element.
// END OF GROUP
/// A handle to the soap struct that manages this instance (automatically set).
struct soap *soap ;
};

这里只导入元素引用:

硬件.xsd

<xsd:complexType name="ComputerSettings">
<xsd:sequence>
<xsd:element name="Frequence" type="xsd:string"/>
<xsd:element name="DedicatedMemory" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>

GPU.xsd

<xsd:element name="Frequence" type="xsd:string"/>
<xsd:element name="DedicatedMemory" type="xsd:string"/>

header.h(注意变量名前的 gpu 命名空间)

class hardware__ComputerSettings
{ public:
/// Element reference "urn:hardware:""urn:gpu":Frequence.
std::string gpu__Frequence 1; ///< Required element.
/// Element reference "urn:hardware:""urn:gpu":DedicatedMemory.
std::string gpu__DedicatedMemory 1; ///< Required element.
/// A handle to the soap struct that manages this instance (automatically set).
struct soap *soap ;
};

最佳答案

文档有一个 section that explains how to use gSoap with multiple namespaces .您也可以customize and optimize the type bindings by specifying prefixes you prefer .

在发行版中,有一些示例可以用来查看它是如何完成的,引用:

Both approaches are demonstrated by example in the gSOAP distribution, the samples/link (C only) and samples/link++ (C++ with C++ namespaces) examples.

关于c++ - gsoap : how to solve namespace error when referencing a group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32698872/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com