1
Почему мой PHP-Script выводит элемент-тег для каждого элемента id? Этот элемент-обертка не нужен, он дает ошибку в запросе SOAP-WS. Я использую nusoap.PHP создает ненужный XML-тег, называемый элементом для запроса SOAP
Неправильные 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>
Correct-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);
Есть ли у кого-нибудь идеи?
спасибо. Mario
Если последние версии не вступили в радикальные изменения, обработка NuSOAP массивов явно неустойчива. Его кодировка по умолчанию для массива с хотя бы одним строковым ключом заключается в создании XML-элементов, названных после ключей массива, таким образом генерируя недопустимый XML для 'array ('key with spaces' => 1)'. Его кодировка по умолчанию для массива со всеми цифровыми клавишами предполагает, что ключи не имеют значения, даже если они не являются последовательными, и выводят список узлов '- '. Он взаимодействует с самим собой, но для подключения к сторонней службе вам лучше использовать [встроенный 'SOAPClient'] (http://php.net/soapclient). –
IMSoP
Причина, по которой я использовал NuSOAP, - это XML-ответ с Multipart, а собственный SOAPClient не поддерживает Multipart/Related XOP. Тем не менее, я удалил NuSOAP сейчас и снова использовал SOAPClient, но сначала я удаляю все ненужные коды, расширяя SOAPClient. – marioa