СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1 Константинов, И.С. Модель хранения данных в адаптивной автоматизированной системе административного мониторинга [Текст] / И.С. Константинов, А.И. Фролов, Н.А. Кравцова // Информационные системы и технологии. – Орел: ОрелГТУ, 2010. – №4(60). – С. 66-73.
2 Коськин, А.В. Структурные и алгоритмические решения организации импорта данных в автоматизированной адаптивной системе административного мониторинга / А.В. Коськин, А.И. Фролов, А.Ю. Ужаринский // Информационные системы и технологии: материалы Международной научно-технической Интернет-конференции, апрель-май 2011 г., г. Орел – В 3-х т. Т. 1 / под общ. ред. д-ра техн. наук проф. И.С. Константинова. Орел ФГОУ ВПО «Госуниверситет-УНПК», 2011. С. 42-46.
3 Фролов, А.И. Формализация процесса генерации диалоговых интерфейсов сбора данных в автоматизированной адаптивной системе административного мониторинга [Текст] / А.И. Фролов, Н.А. Кравцова // Информационные системы и технологии. – 2011. – №3(65). – С. 12-20.
4 Фролов А.И., Кравцова Н.А. Вопросы алгоритмизации процессов генерации адаптируемых диалоговых интерфейсов в системе административного мониторинга // Компьютерные науки и технологии: Компьютерные науки и технологии: сборник трудов Второй Международной научно-технической конференции. 3-5 октября 2011, г. Белгород. – Белгород: ООО «ГиК», 2011. – С 131-135.
5 The application/json Media Type for JavaScript Object Notation (JSON) [Электронный ресурс]: RFC 4627. – IETF, 2006. – режим доступа: http://tools.ietf.org/html/rfc4627.
6 Bray, T. The W3C Document Object Model (DOM) - A Programmer's View of Documents [Text] / T. Bray, L. Wood // The Gilbane Report on Open Information & Document Systems. – Volume 6, Number 4 (July/August 1998), pages 1-13.
7 ISO/IEC 14977:1996 «Information technology – Syntactic metalanguage – Extended BNF». – 2001. – 12 р.
8 Липаев, В.В. Программная инженерия. Методологические основы [Текст] / В.В. Липаев. – М.: ТЕИС, 2006. – 608 с.
9 Липаев, В.В. Тестирование программ [Текст] / В.В. Липаев. – М.: Радио и связь, 1986. – 296 с.: ил.
10 Котляров, В.П. Основы тестирования программного обеспечения: Учебное пособие [Текст] / В.П. Котляров, Т.В. Коликова. – М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2006. – 285 с.
11 РД 50-34.698-90 Методические указания. Информационная технология. Автоматизированные системы. Требования к содержанию документов [Текст]. – М.: Госстандарт СССР, 1990.
12 ГОСТ 19.301-79 Единая система программной документации. Программа и методика испытаний. Требования к содержанию и оформлению [Текст]. – М.: Госстандарт СССР, 1979.
13 ГОСТ 34.603-92 Виды испытаний автоматизированных систем [Текст]. – М.: Госстандарт СССР, 1992.
ПРИЛОЖЕНИЕ А Исходные тексты основных программных модулей экспериментального образца распределенной адаптивной системы административного мониторинга Модуль TImport (содержит в себе описание класса TImport, предназначенного для работы с шаблонами импорта данных)
class TImport
{ var $Errors = array (
0 => 'no val',
1 => 'Нет родителя'); var $Operation = 'get tasks'; //Функция TImport() предназначена для хранения данных о ползователе.
function TImport(){
$this->UserLogin = $_SESSION['Account']['Login'];
$this->User_id = $_SESSION['Account']['User_id'];
}
//Функция DateAdd предназначена для добавления некоторого значения к указанной дате
function DateAdd($interval, $number, $date) { $date_time_array = getdate($date);
$hours = $date_time_array['hours'];
$minutes = $date_time_array['minutes'];
$seconds = $date_time_array['seconds'];
$month = $date_time_array['mon'];
$day = $date_time_array['mday'];
$year = $date_time_array['year']; switch ($interval) { case 'yyyy':
$year+=$number;
break;
case 'q':
$year+=($number*3);
break;
case 'm':
$month+=$number;
break;
case 'y':
case 'd':
case 'w':
$day+=$number;
break;
case 'ww':
$day+=($number*7);
break;
case 'h':
$hours+=$number;
break;
case 'n':
$minutes+=$number;
break;
case 's':
$seconds+=$number;
break;
}
$timestamp= mktime(0,0,0,$month,$day,$year);
return $timestamp; }
//Данная функция предназначена для получения задач, которые должны выполняться в текущий день.
function get_active_tasks(){
$curdate=time();
$da = getdate($curdate);
$curdate=mktime(0,0,0,$da['mon'],$da['mday'],$da['year']);
$query='select * from import_template where active=1';
Query($result,$query);
$res=array();
while ($line = mysql_fetch_row($result)) {
$date=$line[3];
$dur=$line[4];
$durun=$line[5]; $year=substr($date,0,4);
$month=substr($date,5,2);
$day=substr($date,8,2);
$date=mktime(0,0,0,$month,$day,$year);
if ($durun=="месяц") {
$date=$this->dateadd('m',$dur,$date);
}
else if ($durun=="день") {$date=$this->dateadd('w',$dur,$date);}
else $date=$this->dateadd('yyyy',$dur,$date);
if ($curdate==$date) {
$res[$line[0]]=$line[1];
}
}
return $res;
}
//Данная функция предназначена для получения списка существующих шаблонов импорта данных.
function get_import_templates(){
$query='select id,title from import_template';
Query($result,$query);
$res=array();
while ($line = mysql_fetch_row($result)) {
$res[$line[0]]=$line[1];
}
return $res;
}
//Данная функция предназначена для получения информации о выбранной задаче импорта данных.
function template_info($id){
$query='select * from import_template where id='.$id;
Query($result,$query);
if (mysql_num_rows($result) == 0) {return -1; exit;}
$line = mysql_fetch_row($result);
$all_res = array(
0 => $line[0],
1 => $line[1],
2 => $line[2],
3 => $line[3],
4 => $line[4],
5 => $line[5],
6 => $line[6],);
$query='select title,import_property.start_date from property,import_property
where import_property.import_template_id='.$id.' and
property.id=import_property.property_id';
Query($result,$query);
$res=array();
while ($line = mysql_fetch_row($result)) {
$res[]=$line[0].':'.$line[1];
}
$query='select title from object_type,import_property
where import_property.import_template_id='.$id.' and
object_type.id=import_property.property_id';
Query($result,$query);
$res1=array();
while ($line = mysql_fetch_row($result)) {
$res1[]=$line[0];
}
$all_res[7]=$res;
$all_res[8]=$res1;
return $all_res;
} //Данная функция создаёт шаблон импорта данных.
function create_template($title,$url,$date,$duration,$duration_unit,$active, $propertys, $object_types){
$query='insert into import_template values(Null,\''.$title.'\',\''.$url.'\',\''.$date.'\','.$duration.',\''.$duration_unit.'\','.$active.')';
Query($result,$query);
$id=mysql_insert_id();
foreach ($propertys as $key => $name1) { $name = explode(':',$name1);
for($i=0;$i $name[$i]=trim($name[$i]);} $query = 'select id from property where title=\''.$name[0].'\'';
Query($result,$query);
if (mysql_num_rows($result) != 0) {
$line = mysql_fetch_row($result);
$id1=$line[0];
}
else {return $this->errors[0]; exit;}
if ($name[1]='') {$name[1]='0000-00-00';}
$query='insert into import_property values('.$id.','.$id1.',\''.$name[1].'\');';
Query($result,$query);
}
foreach ($object_types as $key => $name) {
$query = 'select id from object_type where title=\''.$name.'\'';
Query($result,$query);
if (mysql_num_rows($result) != 0) {
$line = mysql_fetch_row($result);
$id1=$line[0];
}
else {return $this->errors[0]; exit;}
$query='insert into import_object values('.$id.','.$id1.');';
Query($result,$query);
}
return 1;
} //Данная функция выводит информацию о задачах мпорта которая отображается в главном диалоге импорта данных.
function get_import_tasks(){
$query='select id,title,active,date from import_template';
Query($result,$query);
while ($line = mysql_fetch_row($result)) {
$res[$line[0]]=array($line[1],$line[2],$line[3]);
}
return $res;
} //Данная функция предназначена для активации выбранной задачи импорта данных.
function Activate($id){
$query='select url,date,duration,active from import_template where id='.$id;
//print $query;
Query($result,$query);
//print 'rrr';
if (mysql_num_rows($result) == 0) {return $this->errors[1]; exit;}
else{
$line=mysql_fetch_row($result);
if ($line[3]==0) {
if (($line[0]!='') && ($line[1]!='') && ($line[2]!='')){
$query='update import_template set active=1 where id='.$id;}
else {
return ('Данная задача не может быть активирована, т.к. не введены все необходимые параметры!'); exit;}
}
else {$query='update import_template set active=0 where id='.$id;}
Query($result,$query);
}
} //Данная функция удаляет выбранный шаблон импорта данных.
function Deletetemp($id){
$query='delete from import_property where import_template_id='.$id;
Query($result,$query);
$query='delete from import_object where import_template_id='.$id;
Query($result,$query);
$query='delete from import_template where id='.$id;
Query($result,$query);
}
//Данная функция изменяет выбранный шаблон импорта данных
function Apdate_template($id,$title,$url,$date,$duration,$duration_unit,$active, $propertys, $object_types){
//Сначала удаляются старые данные об импортируемых показателях и и объектах, а затем добавляются новые данные.
$query='delete from import_property where import_template_id='.$id;
Query($result,$query);
foreach ($propertys as $key => $name1) { $name = explode(':',$name1);
for($i=0;$i $name[$i]=trim($name[$i]);} $query = 'select id from property where title=\''.$name[0].'\'';
Query($result,$query);
if (mysql_num_rows($result) != 0) {
$line = mysql_fetch_row($result);
$id1=$line[0];
}
else {return $this->errors[0]; exit;}
if ($name[1]='') {$name[1]='0000-00-00';}
$query='insert into import_property values('.$id.','.$id1.',\''.$name[1].'\');';
Query($result,$query);
}
$query='delete from import_object where import_template_id='.$id;
Query($result,$query);
foreach ($object_types as $key => $name) {
$query = 'select id from object_type where title=\''.$name.'\'';
Query($result,$query);
if (mysql_num_rows($result) != 0) {
$line = mysql_fetch_row($result);
$id1=$line[0];
}
else {return $this->errors[0]; exit;}
$query='insert into import_object values('.$id.','.$id1.');';
Query($result,$query);
}
$query = 'update import_template set title=\''.$title.'\',url=\''.$url.'\',date=\''.$date.
'\',duration='.$duration.',duration_unit=\''.$duration_unit.'\',active='.$active.' where id='.
$id;
Query($result,$query);
return 1;
} } ?> Модуль TImportAction.php (содержит описание класса TImportAction, который содержит в себе методы для формирования и отправки запроса на импорт данных) class TImportAction
{
//Сохрагнение информации о текущем пользователе.
function TImportAction(){
$this->UserLogin = $_SESSION['Account']['Login'];
$this->User_id = $_SESSION['Account']['User_id'];
} //Функция для одификации даты
function DateAdd($interval, $number, $date) { $date_time_array = getdate($date);
$hours = $date_time_array['hours'];
$minutes = $date_time_array['minutes'];
$seconds = $date_time_array['seconds'];
$month = $date_time_array['mon'];
$day = $date_time_array['mday'];
$year = $date_time_array['year']; switch ($interval) { case 'yyyy':
$year+=$number;
break;
case 'q':
$year+=($number*3);
break;
case 'm':
$month+=$number;
break;
case 'y':
case 'd':
case 'w':
$day+=$number;
break;
case 'ww':
$day+=($number*7);
break;
case 'h':
$hours+=$number;
break;
case 'n':
$minutes+=$number;
break;
case 's':
$seconds+=$number;
break;
}
$timestamp= mktime(0,0,0,$month,$day,$year);
return $timestamp;
} //Создание xml-запроса при автоматическом импорте данных.
function Createxmlzapros($id){
print 'tut';
$xml=new DomDocument('1.0','utf-8');
$import = $xml->appendChild($xml->createElement('import'));
$query='select * from import_template where id='.$id;
Query($result,$query);
$line = mysql_fetch_row($result);
$date=$line[3];
$count=$line[4];
$mes=$line[5];
$year=substr($date,0,4);
$month=substr($date,5,2);
$day=substr($date,8,2);
$date=mktime(0,0,0,$month,$day,$year);
$curdate=time();
$import->setAttribute('startdate',date("Y-m-d",$date));
$import->setAttribute('enddate',date("Y-m-d",$curdate)); $query='select title from property,import_property where import_property.import_template_id='.$id.
' and import_property.property_id=property.id';
Query($result,$query);
while ($line = mysql_fetch_row($result)) {
$propertys[]=$line[0];
}
$query='select title from object_type,import_object where import_object.import_template_id='.$id.
' and import_object.object_type_id=object_type.id';
Query($result,$query);
while ($line = mysql_fetch_row($result)) {
$types[]=$line[0];
}
print_r($types);
print_r($propertys);
for($i=0;$i $types[$i]=trim($types[$i]);}
for($i=0;$i $type[$i]=$import->appendChild($xml->createElement('type'));
$type[$i]->appendChild($xml->createTextNode($types[$i]));
}
for($i=0;$i $prop[$i]=$import->appendChild($xml->createElement('property'));
$prop[$i]->appendChild($xml->createTextNode($propertys[$i]));
}
$xml->formatOutput = true;
$xml->save('file.xml');
} //Создание xml-запроса при ручном импорте данных.
function Createxmlzapros1($id,$s_date,$e_date){
$xml=new DomDocument('1.0','utf-8');
$import = $xml->appendChild($xml->createElement('import'));
$query='select * from import_template where id='.$id;
Query($result,$query);
$line = mysql_fetch_row($result);
$date=$line[3];
$count=$line[4];
$mes=$line[5];
$year=substr($date,0,4);
$month=substr($date,5,2);
$day=substr($date,8,2);
$date=mktime(0,0,0,$month,$day,$year);
$curdate=time();
$import->setAttribute('startdate',$s_date);
$import->setAttribute('enddate',$e_date); $query='select title from property,import_property where import_property.import_template_id='.$id.
' and import_property.property_id=property.id';
Query($result,$query);
while ($line = mysql_fetch_row($result)) {
$propertys[]=$line[0];
} $query='select title from object_type,import_object where import_object.import_template_id='.$id.
' and import_object.object_type_id=object_type.id';
Query($result,$query);
while ($line = mysql_fetch_row($result)) {
$types[]=$line[0];
}
for($i=0;$i $types[$i]=trim($types[$i]);}
for($i=0;$i $type[$i]=$import->appendChild($xml->createElement('type'));
$type[$i]->appendChild($xml->createTextNode($types[$i]));
}
for($i=0;$i $prop[$i]=$import->appendChild($xml->createElement('property'));
$prop[$i]->appendChild($xml->createTextNode($propertys[$i]));
}
$xml->formatOutput = true;
$xml->save('file.xml'); } //Отправка xml-запроса на удалённый сервер.
function setxml($file1,$adress){
$socket = fsockopen($adress, 80, $errno, $errstr, 30);
if(!$socket)die("$errstr($errno)");
$boundary = md5(uniqid(time()));
$file = "--$boundary\r\n".
"Content-Disposition: form-data; name=\"new_file\";".
" filename=\"file.xml\"\r\n".
"Content-Type: text/xml\r\n".
"Content-Transfer-Encoding: binary\r\n\r\n";
$file = $file.base64_encode(file_get_contents($file1));
$file = $file."\r\n";
$var1 = "--$boundary\r\nContent-Disposition: '.
'form-data; name=\"name\"\r\n\r\n".
urlencode("2011-04-05")."\r\n";
fwrite($socket, "POST /index.php HTTP/1.1\r\n");
fwrite($socket, "Host: $adress\r\n");
fwrite($socket,"User-agent:Opera 10.00\r\n");
fwrite($socket, "Connection: close\r\n");
fwrite($socket,"Content-Type: ".
"multipart/form-data; boundary=$boundary\r\n");
fwrite($socket,"Content-length:".(strlen($file)+strlen($var1))."\r\n");
fwrite($socket,"Accept:*/*\r\n");
fwrite($socket,"\r\n");
fwrite($socket,"$file");
fwrite($socket, "$var1");
fwrite($socket,"--$boundary--\r\n");
fwrite($socket, "\r\n");
$answer = '';
$fl=false;
$i=0;
$fileHandle=fopen('rez2.xml','w');
while(!feof($socket)){
$i++; $fl=false;
$answer = fgets($socket, 4096);
if ($fl) {echo htmlspecialchars($answer).' ';
fputs($fileHandle,$answer);}
if ( htmlspecialchars($answer)=='') {
print 'yes';}
}
fclose($fileHandle);
fclose($socket);
} function set_date($id){
$curdate=time();
$query='update import_template set date=\''.date("Y-m-d",$curdate).'\' where id='.$id;
Query($result,$query);
}
}
?>
Модуль import.php (содержит функции, осуществляющие разбор xml-документа, анализ и вставку импортируемых данных) require_once('config.php');
require_once('modules/utils.php'); //Функция изменения даты.
function DateAdd($interval, $number, $date) { $date_time_array = getdate($date);
$hours = $date_time_array['hours'];
$minutes = $date_time_array['minutes'];
$seconds = $date_time_array['seconds'];
$month = $date_time_array['mon'];
$day = $date_time_array['mday'];
$year = $date_time_array['year'];
switch ($interval) {
case 'yyyy':
$year+=$number;
break;
case 'q':
$year+=($number*3);
break;
case 'm':
$month+=$number;
break;
case 'y':
case 'd':
case 'w':
$day+=$number;
break;
case 'ww':
$day+=($number*7);
break;
case 'h':
$hours+=$number;
break;
case 'n':
$minutes+=$number;
break;
case 's':
$seconds+=$number;
break;
}
$timestamp= mktime(0,0,0,$month,$day,$year);
return $timestamp; } //Функция добавления значений периодического поазателя.
function addpropertyvalues($mas1, $mas2, $count2){
global $depth;
$str=$mas1[0][0];
$str1=$mas1[0][1];
$query='select * from stock_object where title=\''.$str.'\' and exists
(select * from property_value where stock_object.id=property_value.id_object and
property_value.id_property=13 and property_value.value='.$str1.')';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
$query='select * from stock_object where title=\''.$str.'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
die('Информация об объекте родителе не содержится в системе!');}
else {$line = mysql_fetch_row($result);
$id1=$line[0];
}
else {$line = mysql_fetch_row($result);
$id1=$line[0];
$str=$mas1[1];
$query='select id,duration,duration_unit from property where title=\''.$str.'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {die('error2');}
else {$line = mysql_fetch_row($result);
$id2=$line[0];
$dur=$line[1];
$durun=$line[2];}
$query='select start_date from property_value where id_object='.$id1.' and id_property='.$id2;
Query($result,$query);
if (mysql_num_rows($result) == 0) {$date=$mas2[0];}//die('error3');}
else {$line = mysql_fetch_row($result);
$date=$line[0];}
$year=substr($date,0,4);
$month=substr($date,5,2);
$day=substr($date,8,2);
$date=mktime(0,0,0,$month,$day,$year);
for ($i=0;$i<=$count2;$i=$i+2)
{ $year=substr($mas2[$i],0,4);
$month=substr($mas2[$i],5,2);
$day=substr($mas2[$i],8,2);
$curdate=mktime(0,0,0,$month,$day,$year);
while ($curdate>$date)
{
if ($durun=="месяцы") {
$date=dateadd('m',$dur,$date); }
else {$date=dateadd('yyyy',$dur,$date);} }
$query='select * from property_value where id_property='.$id2.' and id_object='.$id1.' and start_date=\''.date("Y-m-d",$date).'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
$str=$mas2[$i+1];
$query='insert into property_value values(null,'.$id2.','.$id1.','.$str.',NULL,NULL,\''.date("Y-m-d",$date).'\');';
Query($result,$query);
if ($active)
echo 'Добавленно новое значение периодического показателя '
.$mas1[1].' для объекта '.$mas1[0][0].'
на дату '.date("Y.m.d",$date).' - '.$str.' ';
}
$str=$mas2[$i]; }
//Функция добавления значения непериодического показателя.
function AddProperty($mas)
{ $str=$mas[0][0];
$str1=$mas[0][1];
$query='select * from stock_object where title=\''.$str.'\' and exists
(select * from property_value where stock_object.id=property_value.id_object and
property_value.id_property=13 and property_value.value='.$str1.')';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
$query='select * from stock_object where title=\''.$str.'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
die('Информация об объекте родителе не содержится в системе!');}
else {$line = mysql_fetch_row($result);
$id1=$line[0];
}
else {$line = mysql_fetch_row($result);
$id1=$line[0];
$str=$mas[1];
$query='select id from property where title=\''.$str.'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {die('error2');}
else {$line = mysql_fetch_row($result);
$id2=$line[0];}
$query='select * from property_value where id_property='.$id2.' and id_object='.$id1;
Query($result,$query);
if (mysql_num_rows($result) == 0) {
$str=$mas[2];
$query='insert into property_value values(null,'.$id2.','.$id1.','.$str.',NULL,NULL,\'0000-00-00\');';
Query($result,$query);
if ($active)
echo 'Добавленно новое значение показателя '
.$mas[1].' для объекта '.$mas[0][0].
' - '.$mas[2].' '; } } //Функция добавления нового объекта учёта.
function ADDObject($mas){
global $depth;
$parent='';
$c=0;
$f=false;
$query='select * from object_type where title=\''.$mas[1].'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {die('Информация о типе потомке не содержится в системе!');}
else {$line = mysql_fetch_row($result);
$id2=$line[0];
for ($i=0;$i { $str=$mas[0][$i];
$str1=$mas[0][$i+1];
$query='select * from stock_object where title=\''.$str.'\' and exists
(select * from property_value where stock_object.id=property_value.id_object and
property_value.id_property=13 and property_value.value='.$str1.')';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
$query='select * from stock_object where title=\''.$str.'\'';
Query($result,$query);
if (mysql_num_rows($result) == 0) {
die('Информация об объекте родителе не содержится в системе!');}
else {$line = mysql_fetch_row($result);
$id3=$line[0]; }
else {$line = mysql_fetch_row($result);
$id3=$line[0];}
$str=$mas[2][0];
$str1=$mas[2][1];
$query='select * from stock_object,property_value, property where stock_object.title=\''.$str.'\'
and property_value.id_object=stock_object.id and property_value.id_property=13 and
property_value.value='.$str1;
Query($result,$query);
if (mysql_num_rows($result) == 0) {
$query='insert into stock_object values(null,\''.$str.'\','.$id2.');';
Query($result,$query);
$id=mysql_insert_id();
$query='insert into property_value values(null,13,'.$id.','.$str1.',Null,Null,0000-00-00);';
Query($result,$query);
$f=true; }
$query='select * from stock_object,property_value, property where stock_object.title=\''.$str.'\'
and property_value.id_object=stock_object.id and property_value.id_property=13 and
property_value.value='.$str1;
Query($result,$query);
if (mysql_num_rows($result) == 0){}
else {$line = mysql_fetch_row($result);
$id4=$line[0];
$query='insert into property_value values(null,12,'.$id4.','.$id3.',NULL,NULL,0000-00-00);';
Query($result,$query);
$parent=$parent.$mas[0][$i].',';
$c=$c+1;}}
if ($f) { $parent=substr($parent,0,strlen($parent)-1);
if ($active) {
echo 'Добавлен новый объект
'.$str.'';
if ($c==1) {
echo ' Объект родитель
'.$mas[0][0].' . ';}
else {echo ' Объекты родители
'.$parent.' . ';}}
} } //Данная функция предназначена для разбора открывающихся тегов.
function startElement($parser, $name, $attrs) {
global $depth;
global $tip;
global $count;
global $mas1;
global $fl;
global $fl2;
global $count2;
if ($name=='OBJECT')
{$tip=1; $count=0; unset($mas1[0]);}
else if ($name=='PROPERTY') {$tip=2; $count=0;}
else if ($name=='VALUES') {$fl=true; $count2=0;
else
if ($name=='PARENT_NAMES') {$fl2=true; $count2=0;}
else{
if ($fl2) {
foreach ($attrs as $attr => $value)
$mas1[$count][$count2*2+1]=$value; }
else{
foreach ($attrs as $attr => $value) {
$mas1[$count][1]=$value;
} } } //Данная функция предназначена для разбора значения между тегами.
function stringElement($parser, $str) {
if (strlen(trim($str)) > 0) {
global $depth;
global $tip;
global $count;
global $mas1;
global $fl;
global $fl2;
global $count2;
global $mas2;
$str=iconv("UTF-8","cp1251",$str);
if (($count==0) and ($fl2)) {
$mas1[0][$count2*2]=$str;
$count2++;
}
else
if (($tip==1) and (($count==0) or ($count==2))){
$mas1[$count][0]=$str; $count++; }
else if (($tip==2) and ($count==0)) {
$mas1[$count][0]=$str; $count++; }
else
{$mas1[$count]=$str; $count++;} // выводим строку
if ($fl) {$mas2[$count2]=$str; $count2++;}
} } //Данная функция предназначена для разбора закрывающегося тега.
function endElement($parser, $name) {
global $depth;
global $tip;
global $count;
global $mas1;
global $fl;
global $fl2;
global $count2;
global $mas2;
global $propertys;
global $types;
$depth--;
if ($name=='PARENT_NAMES') {$fl2=false; $count2=0; $count++;}
if ($name=='OBJECT')
{$tip=0; echo 'true1'; ADDObject($mas1); $count=0; unset($mas1[0]);}
else
if ($name=='PROPERTY') {$tip=0; $count=0; if ($fl)
{$fl=false; echo 'true2'; addpropertyvalues($mas1, $mas2, $count2-1); $count2=0; unset($mas1); unset($mas2);}
else {echo 'tut3'; addproperty($mas1); unset($mas1);}} // уменьшаем глубину
} //В цикле читается весь xml-документ.
$depth = 0;
global $mas1;
global $fl2;
$fl2=false;
$xml_parser = xml_parser_create("UTF-8");
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "stringElement");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input"); }
if ($active)
echo ' Результаты импорта данных
Результаты импорта данных ';
$str=$_POST['Property'];
$propertys = explode(',',$str);
for($i=0;$i $propertys[$i]=trim($propertys[$i]);}
$str=$_POST['Comment'];
$types = explode(',',$str);
for($i=0;$i $types[$i]=trim($types[$i]);}
while ($data = fgets($fp)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
echo " XML Error: ";
echo xml_error_string(xml_get_error_code($xml_parser));
echo " at line ".xml_get_current_line_number($xml_parser);
break; } }
xml_parser_free($xml_parser);
if ($active)
echo 'Вернуться к главной странице
|