Консультация № 182754
06.04.2011, 03:39
69.60 руб.
0 6 0
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Пришло письмо из Казначейства "Требования к форматам и способам передачи сведений о государственных или муниципальных контрактахна общероссийский официальный сайт" в формате XML версия 8.0. Раньше делали в Excel. Прислали структуру и описание XML документа. А как это сделать вот это и есть мой вопрос??? Хочется разобраться, а с чего начать......хватаюсь за всё подряд !

Обсуждение

Неизвестный
06.04.2011, 06:25
общий
Ну наконец-то наши органы гос-власти двигаются в правильном направлении.
Если есть структура, то никаких проблем быть не должно. Можно делать хоть в блокноте или каком-нибудь более вменяемом текстовом редакторе.
Или набросать простенький редактор на каком-нибудь php или даже javascript (загрузка выгрузка правда будет тогда методом copy/paste, но сделать вполне реально).
Должны были прислать валидатор, так что можно пробовать делать в тектовом редакторе.
Неизвестный
06.04.2011, 07:00
общий
.............Или набросать простенький редактор на каком-нибудь php или даже javascript (загрузка выгрузка правда будет тогда методом copy/paste, но сделать вполне реально)................
Вот наверное это и есть мой вопрос Нам прислали и валидатор и даже выгруженный пример .xml как на основе этого "примера" создать этот самый "редактор" в который можно внести данные а потом выгрузить в .xml (Пример файла прикреплен)
Прикрепленные файлы:
80632a84523211333f41485b0f93a0d0.rar
Неизвестный
06.04.2011, 16:57
общий
Ну, если совсем простенький, то как-нибудь так.
Код:
<?php
session_start();
if(isset($_FILES['file']))
{
$_SESSION['d']=file_get_contents($_FILES['file']['tmp_name']);
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
}


function update($p,$el)
{
if(get_class($el)=='DOMText')
{
if($el->isWhitespaceInElementContent())
return false;
if(isset($_POST[implode(',',$p)])&&($el->wholeText!=$_POST[implode(',',$p)]))
{
$el->replaceData(0,strlen($el->wholeText),$_POST[implode(',',$p)]);
return true;
}
return false;
}
array_push($p,$el->nodeName);
if(isset($el->childNodes))
foreach($el->childNodes as $node)
if(update($p,$node))return true;
return false;
}

function my_print($p,$el)
{
if(get_class($el)=='DOMText')
{
if($el->isWhitespaceInElementContent())
return;
print "<tr><td>".implode(',',$p)."</td><td style='width:100%;'>";
print "<input type=text value='".
htmlspecialchars($el->wholeText,ENT_QUOTES).
"' name='".
htmlspecialchars(implode(',',$p),ENT_QUOTES).
"' style='width:100%;'></td></tr>";
return;
}
array_push($p,$el->nodeName);
if(isset($el->childNodes))
foreach($el->childNodes as $node)
my_print($p,$node);
}
//echo $doc->saveXML();
$doc = new DOMDocument();
$doc->loadXML($_SESSION['d']);
if($_GET['get']==1)
{
header("Content-disposition: attachment; filename=".urlencode(date("Ymd-His").".xml"));
header("Content-type: text/xml; charset=utf-8");
print $_SESSION['d'];
exit;
}
if($_POST['update']==1)
{
update(Array(),$doc->documentElement);
$_SESSION['d']=$doc->saveXML();
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
exit;
}

print "<html><head>\n<meta http-equiv=content-type content="text/html; charset=UTF-8">\n".
"<meta http-equiv=content-language content=ru >\n".
"</head><body>\n";
print "<form method=post enctype='multipart/form-data' action=''>";
print "<input type=file name=file>";
print "<input type=submit value='ok'>";
print "</form>";
print "<a href='?get=1'>get</a>";
print "<form method=post enctype='multipart/form-data' action=''>";
print "<table style='width:100%'>";
my_print(Array(),$doc->documentElement );
print "</table>";
print "<input type=hidden name=update value=1>";
print "<input type=submit value='ok'>";
print "</form>";
print "</body></html>";
?>

Можно еще поля назвать по русски (через массив) и например сдампить структуру в отдельный файл, чтобы формировать с нуля а не редактировать готовый.
Или очистить все поля и сохранить пустой(упс! Нужно немного поправить в таком случае... На очищенные поля неправильно отреагирует)
Ну и можно добавить элементы типа select, там, где выбор значений. Еще возможно добавить добавление контркта, если их может быть несколько (в путь тогда еще надо добавить индексы...)
Неизвестный
06.04.2011, 22:29
общий
а схему можете приложить?
Неизвестный
07.04.2011, 01:22
общий
...................а схему можете приложить?........................
Да, пожалуйста, схема во вложении
Прикрепленные файлы:
f8a29e9fd1ff03e36d477efe9b4e676f.pdf
давно
Мастер-Эксперт
680
2811
10.04.2011, 21:54
общий
Уважаемые участники, может, вопрос продлить? Ответ будет?
Форма ответа