PHP为SOAP请求创建了一个不需要的XML-Tag调用项

时间:2014-09-24 21:46:36

标签: php xml soap nusoap

为什么我的PHP脚本为每个id-Element输出item-Tag?不需要这些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 个答案:

答案 0 :(得分:0)

删除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));