PHP создает ненужный XML-тег, называемый item для SOAP-запроса.

Почему мой 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);

У кого-нибудь есть идея?

Спасибо.
Марио

1

Решение

Удаление 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));
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]