Я пытаюсь создать следующий 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>