我有以下示例xml消息:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<import namespace="http://schemas.xmlsoap.org/soap/envelope/" schemaLocation="http://schemas.xmlsoap.org/soap/envelope/"></import>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="id" type="xs:string"/>
<xs:element name="relatesTo" type="xs:string"/>
<xs:element name="action" type="xs:string"/>
<xs:element name="version" type="xs:string"/>
<xs:element name="customComplexElement">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="a"/>
<xs:element type="xs:string" name="b"/>
<xs:element type="xs:string" name="c"/>
<xs:element type="xs:string" name="d"/>
<xs:element type="xs:string" name="e"/>
<xs:element type="xs:string" name="f"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我使用其中一个在线工具生成了一个xsd文件:
.ccl-ui-grid {
height: 350px !important; //random height that skips page scroll
overflow: scroll;
}
然后我用wsdl2h.exe生成相应的头文件,然后用soapcpp2.exe编译器编译它。 然后我尝试用函数soap_read_customComplexElement()读取xml文件,我得到的只是SOAP_TAG_MISMATCH。这个方法似乎有效,如果我摆脱消息的所有肥皂的东西,但我想知道在gSOAP中是否有一些功能来解析肥皂信封,标题和正文?
答案 0 :(得分:1)
我有同样的问题。但我刚修好了。 所以,就我而言,我使用这行代码。
struct soap *soap = soap_new1(SOAP_C_UTFSTRING | SOAP_XML_IGNORENS | SOAP_XML_TREE);
关键参数是 SOAP_XML_IGNORENS 。此参数忽略名称空间。
SOAP_XML_IGNORENS in: ignores the use of XML namespaces in input
此问题的根源在于您不在身体内容中声明命名空间。这就是为什么gSoap不知道如何转换这个xml。
这不会被转换,因为gSoap不知道什么是ns4:
<ns4:ParseKeywords><ns4:Keyword>Hello</ns4:Keyword></ns4:ParseKeywords>
但是,如果我声明名称空间,它将被转换
<ns4:ParseKeywords xmlns:ns4="com.idurdyev.idcommerce:ParseKeywords:1.0"><ns4:Keyword>Hello</ns4:Keyword></ns4:ParseKeywords>