Почему мой PHP-скрипт выводит тег элемента для каждого элемента id? Эти item-Wrapper не нужны, они выдают ошибку в запросе SOAP-WS. Я использую nusoap.
Неправильные XML:
<SOAP-ENV:Envelope> <SOAP-ENV:Body> <ns2475:uploadMetaData xmlns:ns2475="..."> <uploadMetaData> <mediaNumber xsi:type="xsd:string">906</mediaNumber> <associations xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="unnamed_struct_use_soapval[2]"> <item> <id xsi:type="xsd:int">1</id> </item> <item> <id xsi:type="xsd:string">5</id> </item> </associations> </uploadMetaData> </ns2475:uploadMetaData> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Правильно-XML:
<SOAP-ENV:Envelope> <SOAP-ENV:Body> <ns2475:uploadMetaData xmlns:ns2475="..."> <uploadMetaData> <mediaNumber xsi:type="xsd:string">906</mediaNumber> <associations xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="unnamed_struct_use_soapval[2]"> <id xsi:type="xsd:int">1</id> <id xsi:type="xsd:string">5</id> </associations> </uploadMetaData> </ns2475:uploadMetaData> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
PHP-код:
$associationslist = array();
foreach($xml->xpath('//associations') as $association) {
// add existing themes to list
array_push($associationslist, array('id'=>$association->id));
}
// add one after looping
array_push($associationslist, array('id'=>$themeid));
$client_mediapool->call('uploadMetaData',array('uploadMetaData'=>array('mediaNumber'=>$mediaid,'associations'=>$associationslist)), $ns);
У кого-нибудь есть идея?
Спасибо.
Марио
Удаление NuSoap Agian и расширение собственного Клиента помогает очень хорошо.
class MySoapClient extends SoapClient
{
public function __doRequest($request, $location, $action, $version, $one_way = 0)
{
$response = parent::__doRequest($request, $location, $action, $version, $one_way);
// parse $response, extract the multipart messages and so on
//this part removes stuff
$start=strpos($response,'<soap:Envelope');
$end=strrpos($response,'</soap:Envelope>');
$response_string=substr($response,$start,$end-$start+16);
return($response_string);
}
}
$wsdl = array();
$wsdl_url = '.../?wsdl';
$auth = 'SOAP_AUTHENTICATION_BASIC';
$login = '...';
$password = '...';
$trace = true;
$location = '.../';
$client = new MySoapClient($wsdl_url, array('authentication' => $auth, 'login' => $login, 'password' => $password, 'trace' => $trace,'location'=>$location));
Других решений пока нет …