PHP对象的WSDL问题,奇怪的<soap-enc:struct>元素</soap-enc:struct>

时间:2011-05-07 16:56:29

标签: php xml soap wsdl

我正在尝试处理通过WSDL提供某些数据的PHP代码。 WSDL文件中有两种方法,一种是工作方式,另一种是完全相同的方法。

GetAllProducts返回:

<ns1:GetAllProductsResponse>
    <describedProductArray>
        <DescribedProduct>
            <id> ... </id>
            <foo> ... </foo>
        </DescribedProduct>
        <Describedproduct>
            ...
        </DescribedProduct>
        ...
</describedProductArray>
etc

但GetAllDischargedProducts返回

<ns1:GetAllDischargedProductsResponse>
     <dischargedProductArray>
        <DischargedProduct>
           <SOAP-ENC:Struct>
              <DischargeDate> ... </DischargeDate>
              <id> ... </id>
           </SOAP-ENC:Struct>
           <SOAP-ENC:Struct>
              <DischargeDate> ... </DischargeDate>
              <id> .. </id>
           </SOAP-ENC:Struct>
           ...
        </DischargedProduct>
    <dischargedProductArray>

我必须摆脱这些元素并将每组数据放入一个单独的元素中。 PHP部分看起来不错。我想这个问题出现在WSLD文件中。

描述数据的部分是:

<complexType name="DescribedProduct">
    <complexContent>
        <extension base="self:Product">
            <sequence>
                <element name="Name" type="self:Name" />
                <element name="Barcode" type="self:Barcode" />
                <element name="Exportation" type="boolean" />
                <element name="Company" type="self:Company" />
                <element name="Prescription" type="self:Prescription" />
                <element name="CommercialForm" type="self:CommercialForm" />
                <element name="IngredientArray" type="self:IngredientArray" />
                <element name="DayToExcretion" type="self:DayToExcretion" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

<complexType name="DescribedProductArray">
    <sequence>
        <element name="DescribedProduct" type="self:DescribedProduct" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
</complexType>

<simpleType name="DischargeDate">
    <restriction base="date" />
</simpleType>           

<complexType name="DischargedProduct">
    <complexContent>
        <extension base="self:Product">
            <sequence>
                <element name="DischargeDate" type="self:DischargeDate" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

<complexType name="DischargedProductArray">
    <sequence>
        <element name="DischargedProduct" type="self:DischargedProduct" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
</complexType>

1 个答案:

答案 0 :(得分:1)

这是因为DischargeDate简单类型已被赋予限制。我建议对此元素使用简单的字符串类型,并对代码中的日期执行任何类型的验证。

因此,将DischargedProduct定义更改为:

<complexType name="DischargedProduct">
    <complexContent>
        <extension base="self:Product">
            <sequence>
                <element name="DischargeDate" type="string" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

并删除DischargeDate

的定义