1

Тема: XML вывод

Привет всем!
Есть незначительная проблема но хотелбы научится или изучится))))
суть:
у меня есть таблица (любая, без разницы), и я её хочу вывести, а еще лучше чтоб вся инфа сохранялась в файл xml со всеми полями как придусмотренно в XML технологиях)))))) подскажите плиз где моно посомотреть или может ктонибудь раньше сталкивался с такой проблемой мож кто даст примеры! вызова из базы.
И еще я в phpMyAdmin есть такая штука экспорт называется, можно её какнибудь вывесть через SQL скрипт чтоб сохранялась в файл!
Зарание благодарен.

2

Re: XML вывод

Генерировать XML файлы содержащие данные БД, безусловно можно, но обычно такие задачи решаются написанием индивидуального скрипта, так как в XML есть понятие вложенности тегов, и прописать логику того, что и куда надо вкладывать - придется в любом случае. Вероятно есть классы упрощающие данную работу, но здесь вам придется самому поискать http://pear.php.net/.

Второго вопроса я не понял. SQL скрипт - такого не бывает, так как SQL это язык запросов. Экспорт в файл в phpMyAdmin итак есть. Или вы имеете в виду SELECT ... INTO OUTFILE 'file_name'?

3

Re: XML вывод

Hanut сказал:

Экспорт в файл в phpMyAdmin итак есть. Или вы имеете в виду SELECT ... INTO OUTFILE 'file_name'?

в phpMyAdmin есть вкладка "экспорт файла в XML" а можно спомощью SQL запроса вызвать эту функцию тоетсь "экспорт файла в XML" и чтоб сохранил локально?

4

Re: XML вывод

Кажется понял, что вы имеете в виду.

Нет, с помощью SQL запроса нельзя вывести данные таблицы в XML файл.

Программы MySQL: mysql и mysqldump имеют ключ --xml, с помощью которого можно генерировать XML файлы содержащие данные таблиц.

phpMyAdmin генерирует XML файл динамически, производя разбор данных.

5

Re: XML вывод

Hanut сказал:

mysql и mysqldump имеют ключ --xml, с помощью которого можно генерировать XML файлы содержащие данные таблиц.

phpMyAdmin генерирует XML файл динамически, производя разбор данных.

да в точку а как моно сделать спомощью тогда php не вкурсе или пособие для начинаюших знаите или исходники какиенибуд в долгу не останусь))

6

Re: XML вывод

Заполните переменные. Если данные лежат в utf8, то проблем не будет, иначе необходимо внести несколько изменений.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>

<head>
  <title>MySQL to XML</title>
</head>

<body>

<?php

$host_name = 'localhost';
$user_name = 'name';
$user_pass = 'pass';
$db_name = 'db_test';
$table_name = 'table_test';

$link = mysql_connect($host_name, $user_name, $user_pass)
    or die('Could not connect: ' . mysql_error());

mysql_select_db($db_name) or die('Could not select database');

$query = 'SELECT * FROM `' . $table_name . '`';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

echo '<textarea cols="50" rows="30">' . "\n";
$xml_data = '<?xml version="1.0" encoding="utf-8" ?>' . "\n";
$xml_data .= "<$db_name>\n";
while ($line = mysql_fetch_row($result)) {
    $i = 0;
    $xml_data .= "\t<$table_name>\n";
    foreach ($line as $col_value) {
        $field_name = mysql_field_name($result, $i++);
        $xml_data .= "\t\t<$field_name>$col_value</$field_name>\n";
    }
    $xml_data .= "\t</$table_name>\n";
}
$xml_data .= "</$db_name>";
echo htmlspecialchars($xml_data);
echo '</textarea>';

mysql_free_result($result);

mysql_close($link);


?>

</body>

</html>

7

Re: XML вывод

Блин класно........ Блин )))) слов нет! а можно сделать чтобы сохранялся сразуже в файл?

8

Re: XML вывод

$file_name = 'file.xml'; // Добавить в область объявления переменных, после строки "$table_name = 'table_test';".

// Вставить данный блок после строки "mysql_close($link);"
if (!$handle = @fopen($file_name, 'w')) {
    echo '<p>Error: Cannot open file "' . $file_name . '".</p>';
} elseif (@fwrite($handle, $xml_data) === false) {
    fclose($handle);
    echo '<p>Error: Cannot write to file "' . $file_name . '".</p>';
} else {
    fclose($handle);
    echo '<p>Done.</p>';
}

9

Re: XML вывод

Вот тебе большое спасибо! Я очень благодарен тебе. Способа еще  рас….

10

Re: XML вывод

Проблема с экпортом в XML

При помощи phpMyAdmin экпортитрую талицу в xml-файл.
Открываю полученный фаил блокнотом и вижу, что вместо русских слов в значениях полей - абракадабра.
Ниже привожу содеожание XML-файла:

<?xml version="1.0" encoding="utf-8"?>
<!--
- phpMyAdmin XML Dump
- version 3.3.1
- http://www.phpmyadmin.net
-
- Хост: localhost
- Время создания: Мар 27 2010 г., 17:58
- Версия сервера: 5.1.39
- Версия PHP: 5.2.13
-->

<pma_xml_export version="1.0" xmlns:pma="http://www.phpmyadmin.net/some_doc_url/">
    <!--
    - Structure schemas
    -->
    <pma:structure_schemas>
        <pma:database name="test" collation="utf8_general_ci" charset="utf8">
            <pma:table name="tab_test">
                CREATE TABLE `tab_test` (
                  `id` int(11) NOT NULL AUTO_INCREMENT,
                  `name` varchar(25) NOT NULL,
                  PRIMARY KEY (`id`)
                ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
            </pma:table>
        </pma:database>
    </pma:structure_schemas>

    <!--
    - База данных: 'test'
    -->
    <database name="test">
        <!-- Таблица  tab_test -->
        <table name="tab_test">
            <column name="id">1</column>

            <column name="name">?????°??????</column>
        </table>
        <table name="tab_test">
            <column name="id">2</column>
            <column name="name">PEtrov</column>
        </table>
    </database>
</pma_xml_export>


Результать команды "SHOW GLOBAL VARIABLES LIKE 'char%'"

Variable_name = Value
  character_set_client = utf8
  character_set_connection = utf8
  character_set_database = utf8
  character_set_filesystem = binary
  character_set_result = utf8
  character_set_server = utf8
  character_set_system = utf8
  character_sets_dir = c:\Program files\MySQL Server 5.1\share\charsets\

11

Re: XML вывод

Bo3gyX
Ошибка в модуле XML. Спасибо, что указали на нее.

Вот быстрое решение.
libraries/export/xml.php, строка 340:
[mono]$buffer .= '            <column name="' . $columns[$i] . '">' . htmlspecialchars(utf8_encode((string)$record[$i]))[/mono]
Необходимо убрать функцию utf8_encode().
[mono]$buffer .= '            <column name="' . $columns[$i] . '">' . htmlspecialchars((string)$record[$i])[/mono]

Еще раз, спасибо, за указание на ошибку. Сейчас отпишу в баг-трак разработчикам.

12

Re: XML вывод

спс. очень помогло smile

13

Re: XML вывод

Да, спасибо. Супер.

14 (изменено: Research, 2014-02-11 12:39:53)

Re: XML вывод

Здравствуйте, каким образом можно реализовать выгрузку в xml из БД по появлению новых записей в таблице? Не понимаю в какую сторону копать, триггеры в sql или какую-то функцию в PHP...

15

Re: XML вывод

Research сказал:

Здравствуйте, каким образом можно реализовать выгрузку в xml из БД по появлению новых записей в таблице? Не понимаю в какую сторону копать, триггеры в sql или какую-то функцию в PHP...

Это зависит от частоты обновления данных. Если раз в минуту, то лучше Через PHP скрипт запускаемый по Крону. Если чаще, то надо попробовать сделать триггер.

16

Re: XML вывод

Hanut сказал:

Это зависит от частоты обновления данных. Если раз в минуту, то лучше Через PHP скрипт запускаемый по Крону. Если чаще, то надо попробовать сделать триггер.

Вообще не чаще раза в минуту, но вот частые обращения скрипта к БД не будут плохо влять на производительность?

17

Re: XML вывод

Research сказал:

Вообще не чаще раза в минуту, но вот частые обращения скрипта к БД не будут плохо влять на производительность?

Это зависит от многих факторов, поэтому можно попробовать и посмотреть.

18

Re: XML вывод

Hanut сказал:

Это зависит от многих факторов, поэтому можно попробовать и посмотреть.

Все же пробую создать триггер, но тогда получается мне надо будет скидывать только в csv, потому что mysql в xml не умеет.
Да и как парсить нужные строки не понимаю, в php понятно, а тут нет.