2017-04-20 189 views
2

我正在拾取一個使用SOAP和WSDL的舊項目,這一點我不太熟悉。我在WSDL(在本例簡化)中定義的數據結構如下:將PHP數組轉換爲SOAP結構

<s:complexType name="RequestPayment"> 
    <s:sequence> 
     <s:element minOccurs="0" name="ProviderData" type="s0:ArrayOfFieldPairOfNameString"/> 
    </s:sequence> 
    <s:attribute name="CancelURL" type="s:string"/> 
    <s:attribute name="ReturnURL" type="s:string"/> 
</s:complexType> 
<s:complexType name="ArrayOfFieldPairOfNameString"> 
    <s:sequence> 
     <s:element maxOccurs="unbounded" minOccurs="0" name="Field" nillable="true" type="s0:PairOfNameString"/> 
    </s:sequence> 
</s:complexType> 
<s:complexType name="PairOfNameString"> 
    <s:simpleContent> 
     <s:extension base="s:string"> 
      <s:attribute name="Name" type="s:string" use="required"/> 
     </s:extension> 
    </s:simpleContent> 
</s:complexType> 

該項目使用的NuSOAP,我的PHP的一部分是這樣的:

$payment['ProviderData'] = array(
    'Field' => array(
     'Name' => 'Foo', 
    ), 
); 

這是能夠產生以下的(再次,簡化這裏):

<payment> 
    <ProviderData> 
     <Field Name="Foo" /> 
    </ProviderData> 
</payment> 

我不知道我的PHP數組應該是什麼樣的格式,以產生XML看起來像以下:

<payment> 
    <ProviderData> 
     <Field Name="name 1">value 1</Field> 
     <Field Name="name 10">value 10</Field> 
     <Field Name="name 2">value 2</Field> 
    </ProviderData> 
</payment> 

我試過設置了一個名爲Value鍵,!Value,和其他變化,都沒有成功。

任何幫助,將不勝感激。謝謝。

+0

爲什麼不使用'XMLWriter'? http://php.net/manual/en/book.xmlwriter.php – JustOnUnderMillions

+0

因爲它是一個傳統的項目,在生產中我不想改變超過需要。 – SteveEdson

+0

所以你使用nusoap函數從數組中生成xml?或者一些自制功能? http://stackoverflow.com/a/6743230/4916265 – JustOnUnderMillions

回答

1

向後工作後(轉換XML到例如PHP),格式爲您想要的是:

$payment['ProviderData'] = array(
    'Field' => array (
    0 => 
    array (
     '!Name' => 'Foo', 
     '!' => 'Bar', 
    ), 
    1 => 
    array (
     '!Name' => 'Amount', 
     '!' => '98', 
    ), 
    ) 
); 
0

最好的解決辦法是使用WSDL的PHP​​發電機蘇施作爲PackageGenerator項目,你不會不知道如何構建請求