|
<< Оглавление >> Работа с SOAP на языке PHP |
![]() ![]()
|
/* Функция 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>'; //Выводим на печать тел. сцены
}