#1
Отправлено 08 Июнь 2014 - 08:59
Подскажите с чего начать и какие команды использовать для создания такого файла
#2
Отправлено 08 Июнь 2014 - 13:58
ManFree (08 Июнь 2014 - 08:59) писал:
Подскажите с чего начать и какие команды использовать для создания такого файла
<?php function fetch2xml($sql) { $q = mysql_query($sql); $doc = new DOMDocument('1.0', 'UTF-8'); $root = $doc->appendChild($doc->createElement('result')); while ($qrow = mysql_fetch_assoc($q)) { $r = $root->appendChild($doc->createElement('r')); foreach($qrow as $name => $value) { // Не включаем поля со значением NULL if ($value !== NULL) { $f = $r->appendChild($doc->createElement($name)); $f->appendChild($doc->createTextNode($value)); } } } return $doc; } mysql_connect(...); mysql_select_db(...); $doc = fetch2xml(...); header("Content-Type: text/xml; charset=UTF-8"); echo $doc->saveXML(); ?>
Сообщение отредактировал maksn: 08 Июнь 2014 - 13:59
#3
Отправлено 08 Июнь 2014 - 16:15
#4
#6
Отправлено 08 Июнь 2014 - 23:16
wondertalik (08 Июнь 2014 - 17:10) писал:
wondertalik Не хочу быть не вежливым. Но откуда Вы знаете уровень не знакомого Вам человека? Если он просит подсказать направление, а не готовое решение его проблемы, то я вправе рассчитывать на достаточный уровень понимания
Special thanks for
Цитата
It's so cool and wonder!
I am shocked and lay down
Сообщение отредактировал maksn: 09 Июнь 2014 - 01:05
#7
Отправлено 09 Июнь 2014 - 01:22
maksn (08 Июнь 2014 - 23:16) писал:
#8
Отправлено 09 Июнь 2014 - 17:01
Начало понятно, передали функции строку с SQL-запросом, результат запихнули в переменную и создали новый объект
$root = $doc->appendChild($doc->createElement('result'));
Здесь у меня начинаются потемки
Создали элемент DOM на основе результ добавили в конец чего-то и все запихнули в рут
в общем не понимаю строчку
while ($qrow = mysql_fetch_assoc($q)) { $r = $root->appendChild($doc->createElement('r'));цикл вайл понятно дальше что делаем с элементами ?
foreach($qrow as $name => $value) { // Не включаем поля со значением NULL if ($value !== NULL) { $f = $r->appendChild($doc->createElement($name)); $f->appendChild($doc->createTextNode($value));
тут понятно перебираем Qrow
цикл будет дополнительно соотносить ключ текущего элемента с переменной $name на каждой итерации.
В моем случае $name я где беру?
ну и последние две строчки не понятны потому как не понимаю где я использую $f чтоб в итоге получить $doc
ну и напоследок
mysql_connect(...); mysql_select_db(...); $doc = fetch2xml(...); header("Content-Type: text/xml; charset=UTF-8"); echo $doc->saveXML(); ?>
зачем мы конектимся в базу, разве мы еще неприконечены?
Не проще записать функцию в файлик и и вызывать инклудом
тогда $doc = fetch2xml(...); где вместо точек пологаю sql запрос.
ну и saveXML понятно
Сообщение отредактировал ManFree: 09 Июнь 2014 - 17:19
#9
Отправлено 09 Июнь 2014 - 22:34
Объяснять долго
Если не понятно, то просто возьмите функцию
function fetch2xml($sql) { $q = sql_query($sql); $doc = new DOMDocument('1.0', 'UTF-8'); $root = $doc->appendChild($doc->createElement('result')); while ($qrow = sql_fetch_assoc($q)) { $r = $root->appendChild($doc->createElement('r')); foreach($qrow as $name => $value) { // Не включаем поля со значением NULL if ($value !== NULL) { $f = $r->appendChild($doc->createElement($name)); $f->appendChild($doc->createTextNode($value)); } } } return $doc; }
Эта функция создаст XML со структурой, соответствующей вашему запросу, где будут перечислены имена полей с их значениями.
Цитата
$name "брать" нигде не нужно. Это имя поля таблицы - ключи массива $qrow, полученного с помощью
while ($qrow = sql_fetch_assoc($q))
foreach($qrow as $name => $value)
Стандартный перебор элементов массива $qrow (записи/строки, возвращаемой запросом).
Цитата
Не проще записать функцию в файлик и и вызывать инклудом
тогда $doc = fetch2xml(...); где вместо точек пологаю sql запрос.
ну и saveXML понятно
Пример был дан как общий случай.
Для КБ действительно не нужно mysql_connect(...); и mysql_select_db(...);
Достаточно вызова функции в нужном Вам месте
$doc = fetch2xml(Текст запроса);
Последние две строчки нужны для вывода полученного XML.
header("Content-Type: text/xml; charset=UTF-8"); echo $doc->saveXML();Да, и специально для Вас, я убрал mysql_ функции, заменив их на аналоги (sql_) в КБ
Special thank's to Wondertalik
Вот пример полученного XML
<result> <r> <cnt_in>2</cnt_in> <cnt_out>1</cnt_out> <rest>1</rest> <cnt_rsvd>1</cnt_rsvd> <id>8</id> <model>Boxer 10 kVA</model> <ed_izm_id>1</ed_izm_id> <ed_izm>шт.</ed_izm> <price>0.00</price> <brand>Makelsan</brand> <brand_id>4</brand_id> <p_group>ИБП</p_group> </r> <r> <cnt_in>5</cnt_in> <cnt_out>1</cnt_out> <rest>4</rest> <cnt_rsvd>1</cnt_rsvd> <id>10</id> <model>Boxer 20 kVA</model> <ed_izm_id>1</ed_izm_id> <ed_izm>шт.</ed_izm> <price>0.00</price> <brand>Makelsan</brand> <brand_id>4</brand_id> <p_group>ИБП</p_group> </r> </result>
Сообщение отредактировал maksn: 09 Июнь 2014 - 23:17
#10
Отправлено 10 Июнь 2014 - 00:47
Если нужно скачать полученный результат, то
header("Content-Type: text/xml; charset=UTF-8"); header("Content-Disposition: attachment; filename=".$name); echo $doc->saveXML();
#11
Отправлено 10 Июнь 2014 - 07:24
Остался один ньюанс, когда мне нужно вывести не все поля таблицы.. но это ладно после экспериментов) если не получится чего-нить
Огромное спасибо за помощь, будем кулибничать)
#12
Отправлено 10 Июнь 2014 - 09:22
ManFree (10 Июнь 2014 - 07:24) писал:
Остался один ньюанс, когда мне нужно вывести не все поля таблицы.. но это ладно после экспериментов) если не получится чего-нить
Огромное спасибо за помощь, будем кулибничать)
Например
$sql = "SELECT * FROM `".DATA_TABLE."42` WHERE `status`=0"; $doc = fetch2xml($sql);
И Вы получите XML в котором будут все "активные" записи со всеми полями из таблицы Контрагенты с их значениями
Нужны другие данные? Формируйте текст запроса и подставляйте в функцию. Названия полей можете задавать самостоятельно
SELECT `f123` as need_name FROM `НУЖНАЯ ТАБЛИЦА` WHERE 'НУЖНОЕ УСЛОВИЕ ОТБОРА ЗАПИСЕЙ'f123 - имя нужного Вам поля.
as need_name - то имя поля, под которым Вы хотите его видеть, в том числе и в XML
Сообщение отредактировал maksn: 10 Июнь 2014 - 10:08
#13
Отправлено 16 Июнь 2014 - 10:35
#14
Отправлено 30 Июнь 2014 - 11:34
При выгрузке по правилам обмена есть поля которые у меня в базе не числятся так как всегда одинаковыеа для выгрузки они нужны. Можно как то их добавить запросом не добавляя в базу данных, или это надо править сам feth2xml
#15
Отправлено 03 Август 2014 - 19:36
#16
Отправлено 08 Август 2014 - 14:43
ManFree (30 Июнь 2014 - 11:34) писал:
При выгрузке по правилам обмена есть поля которые у меня в базе не числятся так как всегда одинаковыеа для выгрузки они нужны. Можно как то их добавить запросом не добавляя в базу данных, или это надо править сам feth2xml
Нужно показать в XML не существующие в базе данные?
Тогда
SELECT 0 as num, 'ТЕСТ' as test, `f123` as need_name FROM `НУЖНАЯ ТАБЛИЦА` WHERE 'НУЖНОЕ УСЛОВИЕ ОТБОРА ЗАПИСЕЙ'Можете вставлять свои "не числящиеся в базе" поля и давать им собственное имя.
0 и ТЕСТ будут присутствовать в каждой записи
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных