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

Langage Perl Discussion :

Perl et les fichiers XML [Tutoriel]


Sujet :

Langage Perl

  1. #1
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut Perl et les fichiers XML
    Bonjour,

    Avec la recrudescence des questions sur la création et le parsing de fichiers XML en Perl, je souhaite créer un tutoriel Perl sur ce sujet.
    Pour ce faire, je souhaite sonder les forumeurs Perl ou non sur l'envie de voir un tutoriel sur "Perl et XML".
    Ceux qui souhaitent voir un tutoriel sur le sujet, je vous demanderais de spécifier ce que vous souhaitez lire dans le tutoriel.
    Voici une liste non exhaustive :
    Exemple :
    • Listes de modules Perl pour parser du XML en Perl ?
    • Liste des modules pour créer des fichiers XML en Perl?
    • Comment valider un fichier XML (avec DTD ou non ) ?
    • Comment choisir le bon module Perl pour parser ou créer un fichier XML ?
    • Comment les installer ?
    • Donnez des exemples de fichiers XML à parser avec des exemples de résultats de parsing.
    • ...



    L'article est maintenant disponible : Perl et les fichiers XML

  2. #2
    Rédactrice

    Avatar de stoyak
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 408
    Points : 1 491
    Points
    1 491
    Par défaut
    Je suis pour, évidemment!

    Un petit exemple de l'utilisation des modules les plus simples pour parser ou écrire un fichier XML serait déjà un bon début.
    Le but est d'avoir les bases de la construction du fichier, après il est nécessaire que chacun s'investisse un minimum pour l'adapter à son propre cas.

    Stoyak
    Cela demande du courage d'en tirer du plaisir
    Quand on n'a qu'un marteau, tous les problèmes ressemblent à un clou

  3. #3
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Je ne connais rien à Perl mais j'utilise pas mal de XML, et ce tuto m'intéresse beaucoup à titre personnel ^^

    Juste pour dire que j'ai voté : "pour + contribution à la rédaction", non pas pour t'aider à produire le contenu (étant donné que j'ignore presque tout de Perl) mais pour la relecture/correction >>> si ça t'intéresse fais-moi signe par MP quand tu auras ton premier jet du contenu

    A+ et merci pour ton travail

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  4. #4
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Pas de souci, l'aide à la rédaction peut être la relecture de l'article, et (c'est le plus important), les idées que vous souhaitez voir développée dans l'article.

  5. #5
    Membre régulier Avatar de Olivier.p
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2009
    Messages : 89
    Points : 93
    Points
    93
    Par défaut
    De même que Romain pour avec aide pour l'orthographe. Je n'ai pas encore le besoin de mélanger perl et xml mais ça pourrait m'intéresser dans l'avenir

    Donc n'hésite pas à me contacter pour relire le travail !

  6. #6
    Membre régulier
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 76
    Points
    76
    Par défaut Bonne initiative
    je suis contre
    blague à part , vu que je débute en perl je trouve génial ce que vous faite...j'ai voter "pour" (évidemmnet).. mais j'ai une question concernant la validation d'un fichier XML, es-ce qu'on peut validé avec XSD au lieu des DTD's dans les scripts perl ?

    je suis en train de downloader l'interpréteur perl 5.10..pour un Win XP2 .. j'ai entendu parlé que cette version n'est pas encore stable es-ce vrai ?

    merci beaucoup

  7. #7
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Bonjour,

    me trouvant face à l'utilisation du protocole SOAP ( interactions entre deux processus pouvant être séparé par un réseau & qui utilise des messages au format XML ) mes recherches n'ont pas été très fructueuse sur l'interface entre un client/serv Perl et respectivement un client/serveur dans un autre langage (implémentant néanmoins SOAP).

    Je pense donc que se serait une bonne idée de s'attarder un peu sur le sujet.
    (pour les prochains comme moi bien-sûr, car moi je dois finir cela pour dans un max de une ou deux semaines).

    J'aurais également acquis (je l'espère) les connaissances suffisantes dans ce domaines (SOAP) pour donner des informations si besoin est.

    Voilou voilou ..

  8. #8
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Bon l'article est terminé et publié. Voici son intitulé :

    Perl et les fichiers XML, Analyse et création des fichiers XML.

    A vos commentaires, n'hésitez pas.

    Merci

  9. #9
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Il est très bien écrit, clair, les exemples seront utiles à plus d'un.
    Excellent article, à mon sens.

    Merci encore.

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  10. #10
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut
    Bonjour a tous,
    Je suis actuellement en train de suivre le tuto:
    http://djibril.developpez.com/tutoriels/perl/perl-xml/

    Je voulai donc essayer de lancer l'exemple donné a savoir lire la page suivante:
    (ExempleXML.xml)
    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
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE annuaire SYSTEM "ExempleDTD.dtd" >
    <annuaire xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ExempleXSD.xsd">
        <personne miseajour="2009-06-18T20:57:57">
            <prenom>djibril</prenom>
            <role>rédacteur</role>
            <email>djibril@monmail.com</email>
            <telephone>+33102030405</telephone>
            <langage name="perl">
              <ModulePreferes>XML::Twig</ModulePreferes>
              <ModulePreferes>XML::Writer</ModulePreferes>
              <ModulePreferes>Config::Std</ModulePreferes>
            </langage>
            <commentaire>
              Personne assez active sur le forum, et
              responsable d'un forum.
            </commentaire>
         </personne>
     
        <personne miseajour="2009-06-14T20:57:57">
            <prenom>gorgonite</prenom>
            <role>rédacteur</role>
            <email>gorgonite@mon.mail.com</email>
            <telephone>+33112131415</telephone>
            <langage name="perl">
              <ModulePreferes>XML::Simple</ModulePreferes>
            </langage>
            <commentaire>
              Personne assez active sur le forum, et
              rédacteur d'articles.
            </commentaire>
         </personne>
     
        <personne miseajour="2009-06-18T21:30:12">
            <prenom>stoyak</prenom>
            <role>rédacteur</role>
            <email>stoyak@monmail.com</email>
            <langage name="perl">
              <ModulePreferes>XML::LibXML</ModulePreferes>
              <ModulePreferes>DBI</ModulePreferes>
            </langage>
            <commentaire>
              Personne assez active sur le forum, et
              en charge de corrections d'articles.
            </commentaire>
        </personne>
     
        <!-- Il n'aime rien et/ou ne connais rien -->
        <personne  miseajour="2009-06-20">
            <prenom>jean</prenom>
            <role>lecteur</role>
            <email>jean@monmail.com</email>
            <commentaire>
              Personne assez ..., bah en faite, ne fait rien :-) .
              Et oui malheureusement, ça existe.
            </commentaire>
        </personne>
    </annuaire>

    Grace a ce code (toujours donné en exemple):
    (RecupInfoFichier.pl)
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    #! /usr/bin/perl
    use strict;
    use warnings;
     
    use XML::Simple;
     
    my $parser = XML::Simple->new( KeepRoot => 1 );
     
    # Creation du fichier resultat
    my $FichierResulat = 'resultat.txt';
    open( my $FhResultat, '>', $FichierResulat )
      or die("Impossible d'ouvrir le fichier $FichierResulat\n$!");
     
    my $doc = $parser->XMLin('ExempleXML.xml');
     
    # Tout le fichier XML est dans $doc sous forme d'arbre
    foreach my $personne ( @{ $doc->{annuaire}->{personne} } ) {
      print {$FhResultat} 'Personne : ';
      print {$FhResultat} $personne->{prenom};
      print {$FhResultat} "\t";
      print {$FhResultat} $personne->{miseajour};
      print {$FhResultat} "\nRole : ";
      print {$FhResultat} $personne->{'role'};
      print {$FhResultat} "\nEmail : ";
      print {$FhResultat} $personne->{email};
      print {$FhResultat} "\nTelephone : ";
      print {$FhResultat} str_if( $personne->{'telephone'}, '' );
     
      if ( $personne->{langage} ) {
        print {$FhResultat} "\nlangage preferes : ";
        langage_process( $personne->{langage} );
      }
      print {$FhResultat} "\nCommentaire : ";
      print {$FhResultat} $personne->{commentaire};
      print {$FhResultat} "\n", "=" x 10, "\n\n";
    }
     
    # Fermeture du fichier
    close($FhResultat);
     
    #==============
    # Procédures
    #==============
    sub is_array {
      my ($var) = @_;
      return ( ref($var) eq 'ARRAY' );
    }
     
    sub str_if {
      my ( $str, $default ) = @_;
      return $default unless $str;
      return $str;
    }
     
    sub langage_process {
      my ($langage) = @_;
      print {$FhResultat} str_if( $langage->{name}, '' );
      return unless $langage->{ModulePreferes};
      if ( is_array( $langage->{ModulePreferes} ) ) {
        foreach my $module ( @{ $langage->{ModulePreferes} } ) {
          module_process($module);
        }
      }
      else {
        module_process( $langage->{ModulePreferes} );
      }
    }
     
    sub module_process {
      my ($module) = @_;
      print {$FhResultat} "\n\t- $module";
    }
    J'ai mis les fichiers ExempleXML.xml et RecupInfoFichier.pl dans "D:\BENJAMIN\testCTRLM2"
    Toutefois, en lançant la commande suivante:
    D:\BENJAMIN\testCTRLM2>d:\"Appli portable\Eclipse_3.5.1\Data\ActivePerl-5.12.2.1202-MSWin32-x86-293621\perl\bin\perl.exe" RecupInfoFichier.pl
    Le fichier resultat.txt est créé mais il est vide et j'obtiens sur mon invite de commande le message d'erreur suivant:
    not well-formed (invalid token) at line 6, column 15, byte 291 at d:/Appli portable/Eclipse_3.5.1/Data/ActivePerl-5.12.2.1202-MSWin32-x86-293621/perl/lib/XML/Parser.pm line 187
    Je suis allé voire mon fichier parser.pm et a la ligne 187 il y a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $result = $expat->parse($arg);
    Je ne trouve pas d'où pourrai venir l'erreur (car j'imagine bien que le code fonctionne chez les autres )
    Si vous avez une idée, je suis preneur

    Merci,
    Cordialement,
    Benjamin

  11. #11
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    not well-formed (invalid token) at line 6, column 15, byte 291
    Ceci signifie que ton xml est mal formé. Es tu sûr d'avoir bien copié le fichier XML. Es tu sûr qu'il est bien en utf8 ? line 6, column 15 correspond au é de la balise
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <role>rédacteur</role>
    . Ton souci vient donc de là.

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Le problème ne viendrait-il pas de l'encodage du fichier XML, qui ne serait pas en UTF8 comme la directive XML le précise ?

    Après essai, ton script fonctionne chez moi (le fichier XML est stocké en UTF8 sur ma machine)

    Edit : grillé
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #13
    Membre régulier
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    176
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 176
    Points : 75
    Points
    75
    Par défaut
    En effet, il s'agissait d'un problème d'UTF-8.
    Je suis passer par le bloc note pour convertir et ça fonctionne.
    Merci, je vais pouvoir me lancer dans l'étude de ce tuto.

    Bonne continuation,
    COrdialement,
    Benjamin.

  14. #14
    Responsable Perl et Outils

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 818
    Points : 499 183
    Points
    499 183
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Le problème ne viendrait-il pas de l'encodage du fichier XML, qui ne serait pas en UTF8 comme la directive XML le précise ?

    Après essai, ton script fonctionne chez moi (le fichier XML est stocké en UTF8 sur ma machine)

    Edit : grillé
    . Faudrait que je le précise dans le tutoriel. De plus, je viens de m'apercevoir que le lien permettant de télécharger les programmes est non fonctionnel.

Discussions similaires

  1. Probleme avec les fichiers XML
    Par fle7a dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/07/2006, 11h32
  2. Format décimal dans les fichiers XML
    Par wozzz dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 31/05/2006, 10h18
  3. [TOMCAT][XML] Ou placer les fichiers XML ?
    Par kitov dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 01/06/2004, 15h29

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