Создание SOAP-запроса с PHP – как добавить атрибуты в теги XML?

Я пытаюсь создать следующий XML в моем SOAP-вызове:

<CResponse> <ID>int</ID> <Response Action="Apply"> <Question ID="$someint"> <Responses> <Response ID="$someotherint" /> <Response ID="$yetanotherint" /> </Responses> </Question> </Response> </CResponse> 

Я могу создать большую часть вызова просто отлично – я, наконец, взял, что вложенные массивы – мои друзья, но я не знаю, как добавить те ID="$int" и Action="Apply" атрибуты к различным тегам. Я уверен, что это довольно легко, но я просто не могу понять.

ТИА.

Я не знаю о (несколько странном) синтаксисе, предложенном JJ (и в соответствии с вашим ответом на вопрос, он, похоже, не работает), но вы должны иметь возможность сформировать свой запрос xml в любом случае, построив его более или менее «вручную» с использованием класса XSD_ANYXML кодировкой XSD_ANYXML .

См. Этот комментарий пользователя к документации SoapVar Constructor для примера того, как это сделать.

Если XML, который вам нужно построить, становится более сложным, подумайте об использовании SimpleXML или DOMDocument, чтобы собрать его, а не писать напрямую.

(Мне все еще кажется странным, что не должно быть более простого способа сделать это, но пока я его не нашел.)


Изменить: просто нашел другой пример, используя кодировку XSD_ANYXML в этом вопросе, попросив более простой способ сделать это . К сожалению, пока никто не придумал более простой способ: /

Вы должны иметь возможность добавлять атрибуты со следующим синтаксисом:

 array("foo" => array("_" => "cheese", "bar"=>"moo")); 

Это должно привести к следующему XML

 <foo bar="moo">cheese</foo> 

У меня была та же проблема с атрибутами, и я закончил использование XMLWriter, как прокомментировал этот пост: http://eosrei.net/articles/2012/01/php-soap-xml-attributes-namespaces-xmlwriter

Постройте петицию:

 $prefix = 'ns1'; $xml = new \XMLWriter(); $xml->openMemory(); $xml->startElementNs($prefix, 'SomeRequest', null); $xml->writeElementNs($prefix, 'SchemaVersion', null, "2.0"); $xml->startElementNs($prefix, 'SomeComplexType', null); $xml->writeElementNs($prefix, 'MessageId', null, 11); $xml->writeElementNs($prefix, 'Timestamp', null, '2013-07-05T14:43:43.649-04:00'); $xml->startElementNs($prefix, 'Authentication', null); $xml->writeAttribute('SomeAttribute', '12312'); $xml->writeElementNs($prefix, 'UserId', null, 'myUser'); $xml->writeElementNs($prefix, 'Password', null, 'somePass'); $xml->endElement(); $xml->endElement(); $xml->endElement(); $request = new SoapVar($xml->outputMemory(), XSD_ANYXML); $result = $this->call('submit', $request); 

Результат:

 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://xml.somehost.com/XMLSchema/Connect"> <SOAP-ENV:Body> <ns1:SomeRequest> <ns1:SchemaVersion>2.0</ns1:SchemaVersion> <ns1:SomeComplexType> <ns1:MessageId>11</ns1:MessageId> <ns1:Timestamp>2013-07-05T14:43:43.649-04:00</ns1:Timestamp> <ns1:Authentication SomeAttribute='12312'> <ns1:UserId>myUser</ns1:UserId> <ns1:Password>somePass</ns1:Password> </ns1:Authentication> </ns1:SomeComplexType> </ns1:SomeRequest> </SOAP-ENV:Body> </SOAP-ENV:Envelope>