如何向soapVars添加属性

时间:2010-02-13 15:04:55

标签: php soap

我想用这样的属性创建soapVars:

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

这是否可以使用SoapVar构造函数,但没有使用XSD_ANYXML和原始xml字符串?

3 个答案:

答案 0 :(得分:6)

最好的方法是:

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

?> 

结果将是:

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

答案 1 :(得分:1)

在花了很多时间寻找解决方案之后,我才发现这个解决方法。适用于我的情况。

/**
 * 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')));

请求XML是这样的:

    <?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>

答案 2 :(得分:0)

pcmind的回答对我不起作用,如果你在PhpFiddle中尝试它也不行。

我偶然发现了这篇文章,它基本上用XMLWriter创建了xml: http://eosrei.net/articles/2012/01/php-soap-xml-attributes-namespaces-xmlwriter

这完全适合我的情况。