2010-02-13 5 views
4

Je voudrais créer soapVars avec des attributs comme celui-ci:Comment ajouter des attributs à soapVars

<tag attr="xxx">yyy</tag> 

Est-ce possible avec le constructeur SoapVar, mais sans en utilisant XSD_ANYXML et chaînes XML brutes?

Répondre

6

La meilleure façon de le faire est la suivante:

<?php 
$tag['_'] = 'yyy'; 
$tag['attr'] = 'xxx'; 
$tagVar = new SoapVar($tag, SOAP_ENC_OBJECT); 

?> 

le résultat serait:

<tag attr="xxx">yyy</tag> 
+0

wow! Où as-tu trouvé ça? – goorj

+2

vous pouvez toujours vous référer à php.net :) – pcmind

+1

la section des commentaires? :-) – goorj

1

Après avoir passé de nombreuses heures à la recherche d'une solution, je ne ai trouvé cette solution de contournement. Fonctionne dans mon cas.

/** 
* A SoapClient derived class that sets the namespace correctly in the input parameters 
*/ 

class SoapClientNS extends SoapClient { 
// return xml request 
function __doRequest($request, $location, $action, $version, $one_way = NULL) { 

    //Replace each <Typename> with <ns1:Typename> or 
    $request = str_replace('RequestBase', 'ns1:RequestBase', $request); 

    return parent::__doRequest($request, $location, $action, $version, $one_way); 
} 
} 

$client = new SoapClientNS($wsdlURL); 
$client->getAllBooks(array('RequestBase' => array('code' => 'AAAA', 'password' => '234234fdf'))); 

Le XML demande était quelque chose comme ceci:

<?xml version="1.0" encoding="UTF-8"?> 

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://www.travco.co.uk/trlink/xsd/country/request"> 
<env:Body> 
<ns1:getAllBooks> 
<RequestBase code="AAAA" password="234234fdf"/> 
</ns1:getAllBooks> 
</env:Body> 
</env:Envelope> 
+0

C'est bon et serait encore mieux avec XML parser. Vous ne voulez probablement pas remplacer la chaîne 'RequestBase' dans n'importe quelle balise si cela se produit. –

Questions connexes