如何将属性添加到soapVars

问题描述:

我想用这样的属性创建soapVars:如何将属性添加到soapVars

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

这可能与SoapVar构造,但使用XSD_ANYXML和原始XML字符串没有

做到这一点的最好办法是:

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

?> 

的结果将是:

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

哇!你是在哪里找到那个东西的。 – goorj 2011-03-30 14:34:36

+2

你可以随时参考php.net :) – pcmind 2011-04-08 12:49:42

+1

评论部分? :-) – goorj 2011-05-12 20:54:00

花费很多时间寻找解决的办法,我才发现这个解决办法。适用于我的情况。

/** 
* 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> 
+0

这很好,XML解析器会更好。如果碰巧存在,你可能不想替换任何标签中的'RequestBase'字符串。 – 2017-03-16 10:55:52

pcmind的回答并没有为我工作,也没有,如果你尝试在PhpFiddle。

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

这完全适用于我的情况。