Работа с SOAP на языке PHP

<< Оглавление >>

Навигация:  Примеры >

Работа с SOAP на языке PHP

ПредыдущаяВернуться на уроветь вверхСледующая

Данный пример описывает работу с методом GetHallsList

/* Функция parse_xml нужна для обработки XML. */

 

function parse_xml($XMLTEXT) {        

 $parser = xml_parser_create('');

 if(!$parser)

         return false;

 

 $xml_values = array();

 

 xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, 'UTF-8');

 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);

 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);

 xml_parse_into_struct($parser, trim($XMLTEXT), $xml_values);

 xml_parser_free($parser);

 

 $last_tag_ar = & $xml_array;

 $parents = array();

 $last_counter_in_tag = array(1=>0);

 

 foreach($xml_values as $data) {

         switch($data['type']) {

 

                 case 'open':

 

                         $last_counter_in_tag[$data['level']+1] = 0;

                         $new_tag = array('name' => $data['tag']);

 

                         if(isset($data['attributes']))

                                 $new_tag['attributes'] = $data['attributes'];

 

                         if(isset($data['value']) && trim($data['value']))

                                 $new_tag['value'] = trim($data['value']);

 

                         $last_tag_ar[$last_counter_in_tag[$data['level']]] = $new_tag;

                         $parents[$data['level']] =& $last_tag_ar;

                         $last_tag_ar =& $last_tag_ar[$last_counter_in_tag[$data['level']]++];

                 break;

                 case 'complete':

                         $new_tag = array('name' => $data['tag']);

 

                         if(isset($data['attributes']))

                                 $new_tag['attributes'] = $data['attributes'];

 

                         if(isset($data['value']) && trim($data['value']))

                                 $new_tag['value'] = trim($data['value']);

 

                         $last_count = count($last_tag_ar)-1;

                         $last_tag_ar[$last_counter_in_tag[$data['level']]++] = $new_tag;

 

                 break;

                 case 'close':

                         $last_tag_ar =& $parents[$data['level']];

 

                 break;

                 default: break;

         }

 }

 

 return $xml_array;

 

}        

 

/* Функция get_value_by_path  используется для обработки дерева XML и заведению данных в массив */

 

function get_value_by_path($__xml_tree, $__tag_path) {

 

 $tmp_arr =& $__xml_tree;

 

 $tag_path = explode('/', $__tag_path);

 

 foreach($tag_path as $tag_name) {

 

         $res = false;

 

         foreach($tmp_arr as $key => $node) {

                 if(is_int($key) && $node['name'] == $tag_name) {

 

                         $tmp_arr = $node;

                         $res = true;

                         break;

                 }

         }

 

         if(!$res)

                 return false;

 }

 return $tmp_arr;

}

 

 

 

//Создание нового объекта и Установка соединения с сервером SOAP.

 

$client = new SoapClient("http://192.168.1.2:8080/scripts/STicketGate.exe/wsdl/ISTicket");

$login ='login'; //Логин

$pass = 'password'; //Пароль

 

$q = ' ?';

 

$quot = '"';

 

$cod_t = 8; //Код театра (получен ранее)

 

//Получаем массив со списков сцен театра с кодом «8».

 

$request = '<?xml version="1.0" encoding="UTF-8"'.$q.'>

              <GateReq>

            <ReqLogin><UserName>'.$login.'</UserName><UserPass>'.$pass.'</UserPass></ReqLogin>

                  <IP>'.$_SERVER['REMOTE_ADDR'].'</IP>

            <ReqBody><InputRow cod_t="'.$cod_t.'"/></ReqBody>

       </GateReq>';

 

$halls = get_value_by_path(parse_xml($client->GetHallList($request)),'GateAnswer/AnswerBody');

 

 

//Проходим по списку сцен

 

for($i=0; $i< count($halls)-1; ++$i) {

 $hall = $halls[$i]['attributes'];

 

 echo $hall['name_h']. '<BR>'; //Выводим на печать наименование сцены

 echo $hall['Address_h']. '<BR>'; //Выводим на печать адрес сцены

 echo $hall['Tel_h'] . '<BR>'; //Выводим на печать тел. сцены

 

}