Generer une BDD XML

Generer une BDD XML - Perl - Programmation

Marsh Posté le 24-01-2005 à 18:52:40    

Bonjour,
 
Savez vous comment generer des fichiers XML de taille importante?
C'est peut etre possible avec PERL mais je ne connais pas bien ce langage. Pouvez vous m'aider PLIZ.
 
merci d'avance

Reply

Marsh Posté le 24-01-2005 à 18:52:40   

Reply

Marsh Posté le 24-01-2005 à 19:02:25    

C'est possible de générer du XML avec Perl (via modules + libs) mais bon tout dépend du contexte
Pour le peu de XML que j'ai fais je ne pense pas que Perl soit le meilleur outil pour, excepté pour les petites structures

Reply

Marsh Posté le 24-01-2005 à 19:08:12    

A partir d'une structure simple :
<annuaire>
   <personne>
       <nom>hjsjdg</nom>
       <prenom>jshdjh</prenom>
 
</personne>

Reply

Marsh Posté le 24-01-2005 à 19:10:51    

oups
a partir d'une structure simple(voir message d'avant), je voudrai utiliser un programme qui genere ce code xml en boucle et qui remplace les champs entre balise de facon aleatoire
Quel serai le code pour generer ce type de fichier?
 

Reply

Marsh Posté le 24-01-2005 à 19:16:47    

c'est du one-shot ou c'est pour souvent refaire ce genre de choses ?
 
si c'est du one-shot perso je ferais un copier / coller 500 fois avec des termes génériques (XXXX, YYYYY, ZZZZ) et je remplacerais le tout via des sed&awk

Reply

Marsh Posté le 24-01-2005 à 19:24:06    

desole, mais j'comprend pas tout (j'sui debutante)
one-shot?
sed&awk?
J'voudrai creer une BD XML et effectuer des requetes avec XQuery sur cette BDD pour tester les limites du logiciel et voir le temps de reponse des requetes. Donc j'pense qui faudrai creer des fichiers XML assez gros que se soit en balise imbrique comme en grosseur du fichier

Reply

Marsh Posté le 24-01-2005 à 19:28:13    

sinon ok pour le copier coller mais comment je fais pour changer les valeurs entre les balises (parce que les changer 500 fois a la main ca fais bcp

Reply

Marsh Posté le 24-01-2005 à 20:34:26    

One-shot : chose que tu ne fais qu'une seule fois, donc cela ne sert à rien de faire un programme compliqué pour une chose que tu n'utiliseras qu'une seule fois dans ta vie (c-a-d générer du XML)
 
Au vu de ton problème c'est bien du "one-shot", je te conseille donc de copier/coller X fois la portion de code dont tu auras besoin en mettant des valeurs "génériques" afin de les remplacer facilement via des outils style perl, sed ou awk (si tu travailles sous unix bien sûr)
par exemple :
- tu mets la valeur générique "NNNNNNNN" entre les balises <nom> et </nom>
- tu mets la valeur générique "PPPPPPPP" entre les balises <prenom> et </prenom>
 
Ensuite tu cherches à remplacer les NNNNNNNN et les PPPPPPPP par des valeurs aléatoires
 
 
 
bon je vais être gentil aujourd'hui :)
 
imagines que tu as le XML suivant dans fichier.xml :

Code :
  1. <annuaire>
  2.     <personne>
  3.         <nom>NNNNNNNN</nom>
  4.         <prenom>PPPPPPPP</prenom>
  5.     </personne>
  6.     <personne>
  7.         <nom>NNNNNNNN</nom>
  8.         <prenom>PPPPPPPP</prenom>
  9.     </personne>
  10.      ....
  11.     <personne>
  12.         <nom>NNNNNNNN</nom>
  13.         <prenom>PPPPPPPP</prenom>
  14.     </personne>
  15. </annuaire>


 
sous unix tu tapes :

Code :
  1. cat fichier.xml | perl -e 'sub alea { my @t=('a'..'z', 'A'..'Z'); return join "",map $t[rand @t],0..8; } while ($line=<STDIN> ) { $line=~ s/(NNNNNNNN)|(PPPPPPPP)/alea()/e; print $line }'

Reply

Marsh Posté le 24-01-2005 à 21:25:33    

Je ne comprend pas vraiment ce qui te pose probleme. En gros tu fais :

print "<annuaire>";
for my $i (1..10000) {
    my $lastname = randstr();
    my $firstname = randstr();
    print <<"EOF";
    <personne>
        <nom>$lastname</nom>
        <prenom>$firstname</prenom>
    </personne>
EOF
}
print "</annuaire>";


Puis voila, je te laisse le soin d'ecrire la fonction randstr().


Message édité par matafan le 24-01-2005 à 23:29:26
Reply

Marsh Posté le 24-01-2005 à 21:52:09    

tro bien ça marche.
merci beaucoup tout le monde

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed