IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

un autre probleme XML


Sujet :

Modules Perl

  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut un autre probleme XML
    salut,

    j ai 2 fichiers xml input et un output.

    je dois lire le contenu d un tag et l inserer dans le output

    j ai ecrit la structure du l output.xml mais il est encore vide.

    mon probleme c est:
    1-comment lire le contenu d un tag d un des 2 fichiers et l inserer dans le output.xml.
    2-comment lire les 2 fichiers input.xml a partir du command line et puis travailler avec ca au lens du prog

    je suis DEBUTANT et je serais tres reconnaissant d avoir quelqu un qui me donne un coups de pousse.

    Merci

  2. #2
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Salut,
    je suis sur qu'il existe sur CPAN des modules pour traiter le XML, et plus particulierement le DOM : parcourir les noeuds, ajouter un noeud, en suprimer un autre, gerer les fils et les parents...
    Donc a voir sur CPAN : simple xml, sax, xml parser...
    Z.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    je crois que j ai poster ma question dans le mauvais coin.
    je sais que qu il y a des modules dans le CPAN qui traite les XMLs.

    mais j ai besion d aide au niveau du language des idées c est a dire.

    Merci

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    Au admins s ils vous plaits j aimerais que ma discussion soit transformer dans le coin language

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Utilise le module xml::twig pour parser ton fichier xml et montre nous ce que tu as fais.

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    salut djibril merci pour ton petit coup de pousse.

    ok, j ai ecris le output.xml a partir d un perl code de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    use IO;
    use warnings;
     
    my $output = new IO::File(">output.xml");
     
    use XML::Writer;
    my $writer = new XML::Writer(OUTPUT => $output);
     
    $writer->xmlDecl('UTF-8');
    $writer->doctype('xml');
     
    $writer->startTag('xml');
     my @layer_name = (info1, info2, info3); 
     
     
    foreach $layer (@layer_name) {
    $writer->startTag('tag1');
    $writer->characters($layer);
    $writer->endTag('tag1');
    		$writer->startTag('signal');
    		$writer->endTag('Signal');
    		$writer->startTag('minValue');
    		$writer->endTag('minValue');
    		$writer->startTag('maxValue');
    		$writer->endTag('maxValue');
    		$writer->startTag('Invalid');
    		$writer->endTag('Invalid');
    }
     
    $writer->endTag();
    $writer->end();
    il est presque vide comme vous pouver constater. je dois:
    1- le remplir a partir de 2 fichiers input1.xml et input2.xml
    les 3 fichiers ont une structure completement diffierentes
    j ai commencer par parser les 3 fichiers et je suis plus quoi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #!/usr/bin/env perl -w
    use strict;
    use XML::Twig;
     
    my $twig_output = XML::Twig->new(pretty_print => 'indented');
    $twig_output -> parsefile('output.xml');
    my $root_output = $twig_output->root;
     
    my $twig_input1 = XML::Twig->new;
    $twig_input1 -> parsefile('input1.xml');
    my $root_input1 = $twig_input1->root;
     
    my $twig_input2 = XML::Twig->new;
    $twig_input2 -> parsefile('input2.xml');
    my $root_input2 = $twig_input2->root;
    2- je dois lire un nombre quelconque d entrée (ici 2) par line de commande et travailler avec ces entrée au lieu de donner le nom et le lieu de fichier input1.xml par exemple. j arrive pas a trouver le bon code.

    Merci d avance.

  7. #7
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bon, tes explications ne sont pas clairs.
    Je résume ce que je pense avoir compris.

    Tu as 2 fichiers xml que tu dois lire et à partir de ces 2 fichiers, tu dois en générer un qui s'appelle output.xml, c'est bien ça ?

    Si oui, si tu as besoin d'aide, il va falloir que tu nous montres à quoi ressemble tes fichiers xml à parser car on ne peut pas deviner les balises .
    Ensuite, via un exemple, faudra qu'on sache clairement ce que tu souhaites récupérer dans ces fichiers.

    Sans ces indications, personnes sur ce forum ne pourra t'aider en dehors du faite de te conseiller un module à utiliser.

  8. #8
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    Merci djibril tu peux prendre ces 2 fichiers xml comme exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!-- input1.xml -->
    <Test>
     
    		<NumeroId>12455</NumeroId>
    		<Commmande>
    			<GroupeFichiers>
    				<NumeroGroupeInitial>1</NumeroGroupeInitial>
    				<Fichier>
    					<NomFichier1>image1.jpg</NomFichier1>
    					<NomFichier2>image2.jpg</NomFichier2>
    				</Fichier>
    			</GroupeFichiers>
    		</Commande>
     
    </Test>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!-- input2.xml -->
    <Test>
    	<Donnees>
    		<NumeroId>12455</NumeroId>
    		<Commmande>
    			<GroupeFichiers>
    				<NumeroGroupeInitial>1</NumeroGroupeInitial>
    				<Fichier>
    					<NomFichier1>image3.jpg</NomFichier1>
    					<NomFichier2>image4.jpg</NomFichier2>
    				</Fichier>
    			</GroupeFichiers>
    		</Commande>
    	</Donnees>
    </Test>
    je veux aceder au contenu du tag NomFichier1 (ici image3.jpg)par exemple et l inserer dans mon output.xml par exemple dans le tag signal.

    output.xml est gener par le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    use IO;
    use warnings;
     
    my $output = new IO::File(">output.xml");
     
    use XML::Writer;
    my $writer = new XML::Writer(OUTPUT => $output);
     
    $writer->xmlDecl('UTF-8');
    $writer->doctype('xml');
     
    $writer->startTag('xml');
     my @layer_name = (info1, info2, info3); 
     
     
    foreach $layer (@layer_name) {
    $writer->startTag('tag1');
    $writer->characters($layer);
    $writer->endTag('tag1');
    		$writer->startTag('signal');
    		$writer->endTag('Signal');
    		$writer->startTag('minValue');
    		$writer->endTag('minValue');
    		$writer->startTag('maxValue');
    		$writer->endTag('maxValue');
    		$writer->startTag('Invalid');
    		$writer->endTag('Invalid');
    }
     
    $writer->endTag();
    $writer->end();
    Est ce que je dois executer le code ci dessous et puis travailler avec output.xml.
    ou je peux travailler d une autre maniere sans generer ce code appellant le output.pl.

    Merci

  9. #9
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je crois que tu ne saisies pas ce que tu souhaites faire .

    Essaye de te relire, et tu verras que tu n'es pas clair.
    1- Tu m'a mis 2 fichiers input d'exemple, mais tu ne parles pas du premier !
    2- Est ce que tes fichiers xml ont toujours la même architecture ?
    3 - A quoi doit ressembler ton fichier final (il faut un exemple)

    En gros, avant de se lancer dans le code, faut penser à ce que tu veux concrètement faire, quitte à se faire un brouillon. Tu gagneras beaucoup plus de temps à faire ton algo sur papier puis ensuite à voir comment coder.

    Là tu te mélanges entre ce que tu veux faire, le output etc.

    Mon conseil est le suivant :
    1- Reprends tes deux fichiers xml, note ce que tu souhaites récupérer dans les deux.
    2- Crées l'architecture de ton fichier output.xml que tu souhaites avoir au final.
    3- Ainsi tu auras une base solide et concrète de ce que tu souhaites faire.
    4- Et ensuite, penses au code Perl et là on pourra t'aider, car tu pourras nous fournir des exemples simples et concis.

  10. #10
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    ok t as raison j essaye d etre claire:

    les inputs sont generer par des bases de données diffirentes par exemple base de donnée 1 genere un fichier_input1.xml d une architecture diffirente a celle d un 2 eme fichier fichier_input2.xml generer par une autre base de donnée




    voici le output.xml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="UTF-8" ?> 
      <!DOCTYPE xml (View Source for full doctype...)> 
    - <xml>
      <tag1>info1</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      <tag1>info2</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      <tag1>info3</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      </xml>
    1- Reprends tes deux fichiers xml, note ce que tu souhaites récupérer dans les deux.
    je peux poster les inputs parceque il sont grand .

  11. #11
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    J'insiste sur le faite d'être clair car c'est ce qui te permet d'avoir rapidement de l'aide plus facilement sur le forum.
    Quand je te demande de nous montrer tes fichiers, c'est à titre indicatif, donc tu ne vas pas copier ton fichier xml s'il fait 1Go, ça n'a pas de sens.

    Bon, d'après ton dernier post, les choses se clarifient juste un peu . En fait, pour chaque fichier input, tu souhaites générer un fichier output.xml, c'est bien ça ?

    Si oui, pour parser ce fichier, tu utiliseras le module XML::Twig. Maintenant, tu souhaites créer ton fichier output uniquement avec les informations de la balise NomFichier1 ?

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <NomFichier1>image3.jpg</NomFichier1>

    car dans ton output suivant

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding="UTF-8" ?> 
      <!DOCTYPE xml (View Source for full doctype...)> 
      <xml>
      <tag1>info1</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      <tag1>info2</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      <tag1>info3</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      </xml>
    On a un peu de mal à savoir ce que tu veux

  12. #12
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    Merci pour ta patience djibril.

    je veux un fichier output ou il ya des des info qui proviennent de plusieurs fichiers input

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     input1.xml
     <?xml version="1.0" encoding="UTF-8" ?> 
    - <dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2009-03-09T15:12:49">
    <LayerGen>
      <Name>LayerIn</Name> 
      <Meaning>Acc</Meaning> 
      <Data>UI16_layer</Data> 
      <Signal>CAN</Signal> 
      <A-CAN-Signal>-</A-CAN-Signal> 
      <FA-CAN-Signal>AVL_LOGR_RW</FA-CAN-Signal> 
      <AGS>W_STEIGUNG</AGS> 
      <AGS_Label_Roh>W_STEIGUNG_ROH</AGS_Label_Roh> 
      <CANErrInvalid_M>=2000d</CANErrInvalid_M> 
      <CANErrMisc_M>=20</CANErrMisc_M> 
      <Conversion_M>Acclivity</Conversion_M> 
      <LoopTime_M>10ms</LoopTime_M> 
      <Signal_M>CAN</Signal_M> 
      </LayerGen>
     </dataroot>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     input2.xml
     <info>
      <databaseVersion>BNE-Test</databaseVersion> 
      <dtd version="5.0" /> 
      <generationDate>2009-03-12</generationDate> 
      <generationTime>14:05:59</generationTime> 
      <database>qqcbne</database> 
      <generationUserRef idRef="user9475" /> 
      </info>
    - <configurations>
    - <configuration id="productionconfiguration550">
      <name lang="de">PL6</name> 
      <name lang="en">PL6</name> 
      <version>14</version> 
      <status>offen</status> 
      <containerId>226</containerId> 
      <documents /> 
      <iLevelDate>2008-04-03</iLevelDate> 
      <draft>false</draft> 
    - <vehicles>
    - <vehicle id="ve586">
      <term>F01</term> 
      </vehicle>
    - <vehicle id="ve583">
      <term>F02</term> 
      </vehicle>
    - <vehicle id="ve585">
      <term>F04</term> 
      </vehicle>
    - <vehicle id="ve584">
      <term>F07</term> 
      </vehicle>
    - <vehicle id="vehicle587">
      <term>F10</term> 
      </vehicle>
      </vehicles>
      <project>PL6</project> 
      </configuration>
      </configurations>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     output.xml
     
     <xml>
      <tag1>info1</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      <tag1>info2</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      <tag1>info3</tag1> 
      <signal /> 
      <minValue /> 
      <maxValue /> 
      <Invalid /> 
      </xml>
    je veux inserer le contenu de FA-CAN-Signal (du input1.xml) dans le tag signal (du output.xml) et le contenu de <name lang="en"> (du input2.xml) dans le tag minValue de output.xml.
    merci

  13. #13
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Bon bah voilà, c'est déjà plus clair .
    Moi je te conseil d'utiliser le module XML::Twig, il est vraiment très bien et simple d'utilisation. Tu as de la doc sur :
    1 - le CPAN
    2 - Sur le site du créateur du module (avec des exemples simples d'utilisation)

    Voici un exemple rapide pour parser ton fichier input1.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    my $xmlfile = "input1.xml";
    my $twig = XML::Twig->new(
      twig_handlers => {
          LayerGen => \&Parseur_LayerGen,
      }
    )->parsefile($xmlfile);
     
    sub Parseur_LayerGen {
      my( $twig, $BaliseLayerGen )= @_;
      print "Balise FA-CAN-Signal : ", $BaliseLayerGen->first_child('FA-CAN-Signal')->text, "\n";
     
    }

  14. #14
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    Merci djibril je consacre un peu de temps pour twig et je reviens si quelque chose me gene

    merci encore

Discussions similaires

  1. [VB.Net] Un autre probleme avec controle DropDownList
    Par angelevil dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/03/2005, 14h59
  2. [C#] Probleme XML
    Par Blo0d4x3 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 14/01/2005, 23h09
  3. [langage] autre probleme de regex
    Par Ludo167 dans le forum Langage
    Réponses: 3
    Dernier message: 18/08/2004, 17h01
  4. autre probleme pour deriver fonction
    Par voyageur dans le forum Mathématiques
    Réponses: 15
    Dernier message: 28/07/2003, 14h37
  5. utilliser un autre fichier xml dans un xsl
    Par New Bee dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2003, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo