Как добавить атрибуты в soapVars - PullRequest
4 голосов
/ 13 февраля 2010

Я бы хотел создать soapVars с такими атрибутами:

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

Возможно ли это с помощью конструктора SoapVar, но без с использованием XSD_ANYXML и необработанных строк XML?

Ответы [ 3 ]

6 голосов
/ 29 марта 2011

Лучший способ сделать это:

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

?> 

результат будет:

<tag attr="xxx">yyy</tag>
1 голос
/ 01 июля 2015

Потратив много часов на поиск решения, я нашел только этот обходной путь. Работает в моем случае.

/**
 * 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 голосов
/ 15 июня 2016

Ответ pcmind не сработал для меня, а также нет, если вы попробуете его в PhpFiddle.

Я наткнулся на эту статью, которая в основном создает XML с XMLWriter: http://eosrei.net/articles/2012/01/php-soap-xml-attributes-namespaces-xmlwriter

Это полностью работает для моего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...