Forum Programmation.php xml to sql

Posté par  .
Étiquettes : aucune
0
20
juil.
2005
je cherche un script pour traduire un fichier xml en code sql (les create et tralala....)

merci d'avance...
  • # Plus précisément ?

    Posté par  (site web personnel) . Évalué à 2.

    Un XML ca veut pas dire grand chose. Tu veux partir de quoi et arriver à quoi ?
    Interprétation débile de ta question : si tu pars d'un XML avec une liste de la requête suffit d'enlever les balises pour obtenir le code SQL :)-
  • # dtd?

    Posté par  (site web personnel) . Évalué à 2.

    Ce genre de script, s'il existait, serait fortement lié à la dtd des données que tu manipules... Ou alors je n'ai rien compris à XML...

    Il y a des choses qui existent avec des dtd faites pour cà chez microsoft et chez oracle (d'après google).
  • # id

    Posté par  (site web personnel) . Évalué à 2.

    Donne nous la tronche de tes documents XML
  • # En parlant de SQL et de XML..

    Posté par  (site web personnel) . Évalué à 1.

    J'avais vu une fois un DTD qui avait été fait pour ce genre de truc mais a l'époque de ma recherche il m'avait pas convenu..

    y'a t'il un DTS officiel pour ce genre de truc ?

    http://www.theatre-eibel.fr http://www.isc2chapter-yorkshire.co.uk

  • # J'ai !

    Posté par  . Évalué à 3.

    J'ai fait un truc dans le genre en Perl - avec les bons modules, c'est assez facile : XML::Parser - pour parser l'xml, oeuf corse - et Template Toolkit - pour transformer les données en bon gros fichier SQL. Modulo quelques erreurs de retranscription, l'idée est de générer une arborescence des données à partir du xml, et de l'utiliser comme données d'entrée d'un template. Le xml :
    <database name="db">
      <table name="foo">
    	<col name="id" type="int(10) unsigned" notnull="yes" ai="yes" pk="yes"/>
    	<col name="label" type="varchar(255)" notnull="yes"/>
      </table>
    
      <table name="bar">
     ...
    </database">
    
    Le template :
    DROP DATABASE [%database%];
    CREATE DATABASE [%database%];
    USE [%database%];
    
    [%- FOREACH item = tables; %]
    CREATE TABLE `[%item.name%]` ( 
    [%- sep = ''; FOREACH col = item.cols; sep %]
      `[%col.name%]` [% col.type -%] 
    	[%- IF col.notnull; %] NOT NULL[% END; -%] 
    	[%- IF col.ai;%] auto_increment[% ELSE %] default [% col.default; END; -%]
    [% sep=','; END; -%]
        [%- sep %]
      PRIMARY KEY ([% sep=''; FOREACH pk = item.pks; sep; "`"; pk.name; "`"; sep=', '; END; %])
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    [% END; %]
    
    Le script :
    
    use XML::Parser;
    use Template;
    
    my $data;
    my $tables;
    my $currentTable;
    my @cols;
    my @pks;
    
    sub database {
      my ($o, $class, %args) = @_;
      $vars->{database} = $args{name};
    }
    
    sub table {
      my ($o, $class, %args) = @_;
      undef @cols;
      undef %currentTable;
      $currentTable{name} = $args{name};
    }
    
    sub col { 
       my ($o, $class, %args) = @_;
       $my $col = { name => $args{name},
         type => $args{type},
         default => $args{default},
         auto_increment => $args{ai}, 
       };
       push (@cols, $col);
       push (@pks, $col) if exists $args{pk} and $args{pk} eq "yes";
    }
    
    sub table_ {
      my @c = @cols;
      $currentTable{cols} = \@c;
    
      @{$currentTable{pks}} = @pks;
    
      my %h = %currentTable;
      $tables{$h{name}} = \%h;
      push (@tables, $h{name});
    }
    
    sub database_ {
       $vars->{tables} = [ map { $tables{$_} } @tables ];
    }
    
    
    my $parser = new XML::Parser(Style => 'Subs');
    $parser->parsefile($fichier) or die "Failed\n";
    
    my $tt = Template->new();
    						
    $tt->process($tmpl, $data, $outfile) || do {
      my $error = $tt->error();
      print $error, "\n";
    };
    
    
    Le principal intérêt de ce truc c'est de créer plusieurs templates en fonctions des SGBD, ou carrément créer un template pour générer le code en C par ex pour faire quelques requêtes classiques (update/select/delete).
    • [^] # Re: J'ai !

      Posté par  . Évalué à 3.

      Oups désolé, je n'avais pas vu qu'on était dans le forum php, n'y voyez pas une tentative de lancer un troll, c'était vraiment involontaire : je consulte les news et les forums via le flux rss dans akregator, et je n'ai pas fais gaffe au sujet du forum. Ça peut fait un bon exercice de traduction ;-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.