2017-02-16 677 views
0

Я следующий пример XML-сообщения:Анализировать мыло тзд с gSOAP

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header> 
     <to>...</to> 
     <from>...</from> 
     <id>..</id> 
     <relatesTo>...</relatesTo> 
     <action>...</action> 
     <version>...</version> 
    </SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <customComplexElement> 
      <a>a_v</a> 
      <b>b_v</b> 
      <c>c_v</c> 
      <d>d_v</d> 
      <e>e_v</e> 
      <f>f_v</f> 
     </customComplexElement> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Из которого я произвел XSD файл с использованием одного из инструментов онлайн:

<?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> 

Затем я генерировать соответствующий заголовочный файл с помощью wsdl2h.exe, а затем скомпилируйте его с помощью компилятора soapcpp2.exe. Затем я пытаюсь читать xml-файл с помощью функции soap_read_customComplexElement(), и все, что я получаю, это SOAP_TAG_MISMATCH. Этот метод, похоже, работает, если я избавлюсь от всего содержимого мыла, но мне интересно, есть ли какие-то функции в gSOAP для анализа мыльного конверта, заголовка и тела?

ответ

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> 

 Смежные вопросы

  • Нет связанных вопросов^_^