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 :

Erreur de Parsing avec XMS::XSLT


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut Erreur avec XMS::XSLT
    Bonjour ,

    suite à la creation d'un fichier XML contenant des données provenant d'une base

    de données MySQL, j'aimerais pouvoir afficher ces infos dans le navigateur WEB.


    Pour cela j'ai utilisé le module XML::XSLT mais il me retourne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Error while parsing:
    syntax error at line 1, column 0, byte 0 at C:/Program Files/Perl/lib/XML/Parser
    .pm line 187
     
    fz.xsl at C:/Program Files/Perl/site/lib/XML/XSLT.pm line 1507.

    PS voici le bout de code perl concerné :

    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
    use DBI;
    use XML::XSLT;
    use DBIx::XML_RDB;
     
     
    ...\...
     
     
    	#Ouverture et creation du fichier XML
    	my $Chemin_XML_Complet = $Tableau_Chemin_XML[1] . $Tableau_Nom_XML[1];
    	my $Ouverture5_Fichier = open(FILE5,'+>',$Chemin_XML_Complet);
     
     
    	#Verification de la bonne ouverture et creation du fichier XML
    		if ($Ouverture5_Fichier) {
    		print (FILE2 "<> $Nom_Jour $Jour $Mois $Annee <> $Heure:$Minute:$Seconde <> Creation du fichier XML : OK\n");
    		}
     
    		if (!$Ouverture5_Fichier) {
    		print (FILE2 "<> $Nom_Jour $Jour $Mois $Annee <> $Heure:$Minute:$Seconde <> Creation du fichier XML : Echec\n$!\n");
    		}
     
    	#Connexion a la base de donnees MySQL
    	my $XML_MySQL = DBIx::XML_RDB->new("dbi:database=$Tableau_Database[1];hostname=$Tableau_Hote[1];port=$Tableau_Port[1]","mysql","$Tableau_Login[1]","$Tableau_Mdp[1]");
     
     
    	#Verification de la bonne conectivité avec la BDD MySQL
    		if ($XML_MySQL) {
    		print (FILE2 "<> $Nom_Jour $Jour $Mois $Annee <> $Heure:$Minute:$Seconde <> Connexion a la base de donnees MySQL : OK\n");
    		}
     
    		if (!$XML_MySQL) {
    		print (FILE2 "<> $Nom_Jour $Jour $Mois $Annee <> $Heure:$Minute:$Seconde <> Connexion a la base de donnees MySQL : Echec\n$!\n");
    		}
     
     
    	#Creation et execution de la requete MySQL
    	$XML_MySQL->DoSql("SELECT Heure_Debut,Heure_Fin,Nom_Patient,Prenom_Patient,Description_Rendezvous FROM rendezvous, medecin, patient WHERE rendezvous.Numero_Medecin = medecin.ID_Medecin AND rendezvous.Numero_Patient = Patient.ID_Patient AND Date_Rendezvous = now() AND Nom_Medecin = '" . $Nom_Medecin . "' AND Prenom_Medecin = '" . $Prenom_Medecin . "' ORDER BY 'Heure_Debut' ASC");
     
     
    	#Enregistrement des données de la requete MySQL dans le fichier XML
    	print (FILE5 $XML_MySQL->GetData);
     
     
    	#Ouverture et creation du fichier XSL
    	my $Chemin_XSL_Complet = $Tableau_Chemin_XSL[1] . $Tableau_Nom_XSL[1];
    	my $Ouverture6_Fichier = open(FILE6,'+>',$Chemin_XSL_Complet);
     
     
    	#Enregistrement du fichier XSL
    	my $Parser = XML::XSLT->new(Source => $Chemin_XSL_Complet);
     
     
    	#Verification de la bonne ouverture et creation du fichier XSL
    		if ($Ouverture6_Fichier) {
    		print (FILE2 "<> $Nom_Jour $Jour $Mois $Annee <> $Heure:$Minute:$Seconde <> Creation du fichier XSL : OK\n");
    		}
     
    		if (!$Ouverture6_Fichier) {
    		print (FILE2 "<> $Nom_Jour $Jour $Mois $Annee <> $Heure:$Minute:$Seconde <> Creation du fichier XSL : Echec\n$!\n");
    		}
     
     
    	$Parser->transform ($Chemin_XML_Complet);
    	print (FILE6 $Parser->toString);
     
     
    ...\...

    PS : j'ai mis un bout de mon programme ce qui permettrait à quelqu'un de pouvoir m'aider.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Je repost car je souhaiterais vraiment avoir de l'aide concernant ce probleme,
    Merci...

  3. #3
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu ouvres tous tes fichiers en mode lecture/écriture, ou plus exactement en mode écriture/lecture, autrement dit tu écrases le fichier lors de l'ouverture.
    Je pense donc que XML::XSLT a du mal à travailler avec une feuille de style totalement vide...
    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
    #Ouverture et creation du fichier XSL
    my $Chemin_XSL_Complet = $Tableau_Chemin_XSL[1] . $Tableau_Nom_XSL[1];
    # Tu ouvre ton .xsl et tu l'écrase, il est maintenant vide...
    my $Ouverture6_Fichier = open(FILE6,'+>',$Chemin_XSL_Complet);
     
     
    #Enregistrement du fichier XSL
    # Enregistrement ? Quel enregistrement, cette commande est censé
    # créer un objet XML::XSLT à partir d'un fichier .xsl
    # Néanmoins le fichier .xsl en question vient d'être écrasé par toi...
    my $Parser = XML::XSLT->new(Source => $Chemin_XSL_Complet);
     
    # un peu plus loin tu écris :
    $Parser->transform ($Chemin_XML_Complet);
    # cette ligne au moins apparaît à première vue correcte 
    # ... excepté que comme tu n'as jamais refermé FILE5, tu as de 
    # grande chance que le fichier sur le disque n'ait jamais été mis à jour,
    # autrement dit tu es peut-être en train d'essayer de transformer un fichier
    # xml qui est vide (du point de vue de transform() en tout cas)
     
    # Tu écris le xhtml (normalement) obtenu dans FILE6 ? Mais n'était-ce
    # point là ta feuille de style .xsl ? Pourquoi l'écrire là ?
    print (FILE6 $Parser->toString);
    Je crains donc qu'il n'y ait quelques problèmes d'ordonnancement dans tes actions (et certaines parties dont je ne comprend même pas la logique, enfin tu as plus d'éléments pour en juger)...

    Par ailleurs, FILE2, FILE5, FILE6 n'est pas un schéma de désignation très sain pour tes handles de fichiers : il serait de loin préférable de les nommer selon leur contenu. En fait il serait sûrement préférable de les ouvrir ainsi :
    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
     
    # au début de ton script :
    my $log_filename = 'Mon_petit_fichier_de_log.log';
     
     
    # remplissage de $date et $time
    {
      open my($log), '>>', $log_filename
        or die "Couldn't open logfile $log_filename : $!\n";
     
      sub log_time {
        return "<> $date <> $time <> ";
      }
     
      sub log_fatal_failure {
        print $log log_time(), @_, " : Echec\n$!\n";
        exit 1;
      }
     
      sub log_failure {
        print $log log_time(), @_, " : Echec\n$!\n";
      }
     
      sub log_success {
        print $log log_time(), @_, " : Ok\n";
      }
     
      sub success_or_die {
        my ($ok, @to_log) = @_;
        if ($ok) {
          log_success @to_log;
        else {
          log_fatal_failure @to_log;
        }
      }
    }
     
    # ....
     
    # pour ouvrir en écriture, en écrasant le fichier, 
    # et en le créant s'il n'existe pas
    success_or_die( (open my($xml_file), '>', $complete_XML_path),
      "Creation du fichier XML");
     
    # pour ouvrir en lecture, sans écraser le fichier
    success_or_die( (open my($xsl_file), '<', $complete_XSL_path),
      "Ouverture de la feuille XSL");
    # ( mais a priori tu n'as jamais besoin de l'ouvrir explicitement ? )
    --
    Jedaï

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Excuse moi, mais je pensais que les étapes se déroulaient de la façon suivante :

    1 --> creation du fichier xml contenant des données d'une BDD MySQL (utilisation de DBIx::XML_RDB)

    2 --> Creation de la feuille de style XSL à partir du fichier XML (utilisation de XML::XSLT)

    Donc d'aprés ce que tu me dis, il faut que mon XSL soit déjà prêt à emploi...
    Quel module utiliser pour remplir ce ficheir XSL ?

    Merci d'avance

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne pense pas qu'aucun module puisse remplir ton .xsl pour toi... (Tu pourrais générer du XSL, après tout c'est du XML, mais l'intérêt de faire ceci n'est pas évident)
    Le but du .xsl est de spécifier comment le xml va être transformé, dans ton cas en xhtml, donc le contenu d'un .xsl est spécifique au type de document xml à transformer ! Va voir la page de wikipedia pour un peu plus de détails et quelques exemples.

    NB : Si tu ne connais pas du tout XSLT, peut-être serait-il plus rapide d'effectuer la transformation avec un module Perl comme XML::Twig...

    --
    Jedaï

Discussions similaires

  1. Gestion des erreurs de parsing avec PLY
    Par dimele dans le forum Général Python
    Réponses: 6
    Dernier message: 29/07/2014, 10h01
  2. Erreur au parsing avec JSoup
    Par Markasim dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 22/11/2013, 03h43
  3. Erreur parsing avec SimpleDateFormat
    Par riadhhwajdii dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/11/2010, 15h57
  4. [XSLT] Include de fichiers XML et parsing avec du XSL
    Par ElSegador66 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 25/10/2009, 10h19
  5. [SAX] Erreur de parsing XML avec SAX
    Par philobedo dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 02/08/2006, 13h49

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