помогите пжлст. как добавить атрибут к элементу xml?

soap

Новичок
Добрый день, знатоки. Второй день ломаю голову над такой проблемой. Формирую XML для отправки его вэб-сервису. Осталась одна деталь, которую никак не могу сделать. а именно:
необходимо добавить атрибут к тэгу в XML.
Сейчас формируется кусок xml в таком виде
<sysInfo>
<CreateDateTime>2011-05-24T18:00:35Z</CreateDateTime>
</sysInfo>
а нужно
<sysInfo attrib = "attrib_value">
<CreateDateTime>2011-05-24T18:00:35Z</CreateDateTime>
</sysInfo>
пример, который широко распространен в сети и в описании soapVar, возвращает не то:
$amount['_'] = 25;
$amount['currencyId'] = 'GBP';
$sysInfo = new SoapVar( $amount, SOAP_ENC_OBJECT);
возвращает
<sysInfo>
<_>25</_>
<currencyId>GBP</currencyId>
</sysInfo>
// --------------------------
вызов метода с параметрами
$response = $client->__soapCall('createCheckupDemand',
array(new SoapParam('attrib_value', 'attrib_name'),
new SoapParam('attrib_value', 'attrib_name'),
new SoapVar($struct, SOAP_ENC_OBJECT)),
array('soapaction' => 'http://www.example.com/webservices/GetFilteredRecordList'));
добавляет ЭЛЕМЕНТ с именем и значением параметра в xml, что тоже не подходит.

Может, кто-то сталкивался с похожей проблемой? подскажите пжлст! спасибо.
 

soap

Новичок
Либо можно как-то получить текст xml-запроса перед отправкой веб-сервису? чтобы вручную его поправить и отправить.
 
Как вариант, можно использовать XSD_ANYXML
Пример:
PHP:
try {
    $client = new SoapClient('http://www.webservicex.net/geoipservice.asmx?WSDL', 
                             array('trace' => 1)
                            );
    $std = new stdClass();
    $std->IPAddress = new SoapVar('<myns:IPAddress xmlns:myns="http://www.webservicex.net/" testAttribute="Test">192.168.0.1</myns:IPAddress>', XSD_ANYXML);
    $client->GetGeoIP($std);

    $dom = new DOMDocument;
    $dom->loadXML($client->__getLastRequest());
    $dom->formatOutput = true;
    echo $dom->saveXML(), "\n";
    $dom->loadXML($client->__getLastResponse());
    echo $dom->saveXML(), "\n";
    echo "Request headers: \n", $client->__getLastRequestHeaders(), "\n";
    echo "Response headers: \n", $client->__getLastResponseHeaders(), "\n";

} catch(Exception $e) {

}
Request:
PHP:
<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webservicex.net/"> 
  <SOAP-ENV:Body> 
    <ns1:GetGeoIP> 
      <myns:IPAddress xmlns:myns="http://www.webservicex.net/" testAttribute="Test">192.168.0.1</myns:IPAddress> 
    </ns1:GetGeoIP> 
  </SOAP-ENV:Body> 
</SOAP-ENV:Envelope>
Ещё вариант - использовать curl - http://phpclub.ru/talk/threads/Передача-xml-через-post.68200/#post-609826
 

soap

Новичок
Dattaya, спасибо большое! проблему решил с помощью предложенного Вами пути.
 
Сверху