Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostgreSQL+XML / 4 сообщений из 4, страница 1 из 1
22.11.2005, 19:24
    #33393413
AntonIgg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL+XML
Подскажите, пожалуйста, есть ли некоторые пакеты, которые позволяют в результате запроса получить ответ в XML.
...
Рейтинг: 0 / 0
23.11.2005, 03:38
    #33393660
фффф
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL+XML
contrib/xml2

Простейший вариант на перле:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION to_xml(_query text) RETURNS text 
LANGUAGE plperlu AS $body$
my $rv = spi_exec_query($_[ 0 ]);
use XML::Simple;
my $xs = new XML::Simple();
return $xs->XMLout($rv->{rows});
$body$;

select to_xml($$select * from pg_language$$);
...
Рейтинг: 0 / 0
30.11.2005, 11:43
    #33407913
~CommandeR~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL+XML
На данный момент используется связка postgres 8.1 php 5.0.5 apache2 и некий скрипт sql2xml.php который создан для PHP4... Но с помощью другого скрипта Php4toPhp5.php удалось его как-то с глюками запустить... все эти скрипты взяты из инета, теоретически должны работать в PHP4, но мне позарез надо именно 5.
Как реализовать именно на PHP? либо из самой базы вытащить уже в виде XML? вроде там есть библиотека libpgxml но как её использовать?
...
Рейтинг: 0 / 0
30.11.2005, 14:45
    #33408638
~CommandeR~
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PostgreSQL+XML
решение найдено. не особо красиво, но за не имением гербовой, пишем на простой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
<?php
function returnRecord($resultid, $row, $level) 
 {
   $prepend = "";
   for ( $y =  0 ; $y < $level; $y++ )
     $prepend .= "\t";

   for ( $y =  0 ; $y < pg_NumFields($resultid); $y++ ) 
   {
     $record .= $prepend . "\t<" . pg_FieldName($resultid, $y) . ">";
     $data =  Trim(pg_Result($resultid, $row, $y));
     $data = ereg_replace("&", "&", $data);
     $record .= $data;
     $record .= "</" . pg_FieldName($resultid, $y) . ">\n";
   }
   return $record;
 }
//коннект к базе, запрос, шапка xml-документа.
 $conn = pg_Connect("dbname=test user=postgres");
 $result = pg_Query($conn, "SELECT * FROM table");
 $returnData = '<?xml version="1.0"?>' . "\n<root>\n<fieldata>";
 $rows = pg_NumRows($result);
//для каждой записи создаём контейнер...
 for ( $y =  0 ; $y < $rows; $y++ )
 { 
   $returnData .= "\n<row>\n";
   $returnData .= returnRecord($result, $y,  1 );
   $returnData .= "</row>\n";
  } 
//добавляем окончание файла.
  $returnData .= "</fieldata>\n</root>";
  pg_FreeResult($result);
  pg_Close($conn);
//пишем в файл результат, получаем XML-файл...
  $file1 = fopen ("example1.xml", "w");
  fwrite($file1, $returnData);
  fclose($file1);
//применяем шаблон к созданому файлу
  $dom = new domDocument();
  $dom->load("template1.xsl");
  $proc = new xsltprocessor;
  $xsl = $proc->importStylesheet($dom);
  $document = new DomDocument();
   $document->load("example1.xml");
  print $proc->transformToXml($document);

?>
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / PostgreSQL+XML / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]