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 :

parser avec XML::LibXML


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut parser avec XML::LibXML
    Bonjour,

    J'ai un petit soucis pour parser un fichier xml (c'est un fichier SBML en fait). Voici un exemple du fichier xml à parser :

    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
     
    <?xml version="1.0"  encoding="UTF-8"?>
    <sbml xmlns="http://www.sbml.org/sbml/level2" version="1" level="2" xmlns:html="http://www.w3.org/1999/xhtml">
    <model id="ECOLI149" name="">
     <reaction id="GLUC1PURIDYLTRANS__45__RXN" name="UTP--glucose-1-phosphate uridylyltransferase" reversible="true">
        <listOfReactants>
          <speciesReference species="UTP" stoichiometry="1"/>
          <speciesReference species="GLC__45__1__45__P" stoichiometry="1"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="UDP__45__GLUCOSE" stoichiometry="1"/>
        </listOfProducts>
      </reaction>
      <reaction id="_1__46__1__46__1__46__271__45__RXN" name="GDP-L-fucose synthase" reversible="false">
        <listOfReactants>
          <speciesReference species="GDP__45__4__45__DEHYDRO__45__6__45__DEOXY__45__D__45__MANNOSE" stoichiometry="1"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="GUANOSINE_DIPHOSPHATE_FUCOSE" stoichiometry="1"/>
        </listOfProducts>
      </reaction>
      <reaction id="KETOLACTOSE__45__RXN" name="&amp;amp;beta;-galactosidase" reversible="false">
        <listOfReactants>
          <speciesReference species="_3__45__KETOLACTOSE" stoichiometry="1"/>
        </listOfReactants>
        <listOfProducts>
          <speciesReference species="GLC" stoichiometry="1"/>
          <speciesReference species="CPD__45__1242" stoichiometry="1"/>
        </listOfProducts>
      </reaction></model></sbml>
    Je dois récupérer l'id de chaque réaction et la valeur de l'attribut species pour chaque reactif puis pour chaque produit. Voici le code que j'ai fait :

    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
     
    #!/usr/bin/perl -w
    use strict;
    use warnings;
     
    use XML::LibXML;
    use Data::Dumper;
     
    my $FichierXML = 'testxml.xml';
    my $parser     = XML::LibXML->new();
     
     
     
     
    my $tree = $parser->parse_file($FichierXML);
     
    # Creation du fichier resultat
    open(FILE, ">resultat.txt" )
      or die("Impossible d'ouvrir le fichier \n$!");
     
    # Racine du document XML
    my $root = $tree->getDocumentElement;
     
    # Balise personne
    my @reactions = $root->getElementsByTagName('reaction');
     
     
    foreach my $rxn (@reactions) {
    	## on print le nom de la reaction 
    	print FILE "Reaction : ";
    	print FILE $rxn->getAttribute('id')."\n";
     
    	# on print le nom de chaque reactif
     
     
    	my @KinderLOR = $root->getElementsByTagName('listOfReactants');
    		foreach my $child ($KinderLOR[0]->childNodes){
    			print $child->nodeName."\n";
    			print $child->getAttribute('species');
     
    		}
     
     
    }
     
     
    close(FILE);
    L'erreur renvoyée est "can't locate object method "getAttribute" via package XML::LibXML::Text" donc en gros il n'arrive pas à trouver cette méthode qui récupere l'attribut alors que quand je mets hasAttributes à la place il me dit qu'il y a bien des attributs. Par contre si je fais $child->nodeName il me renvoie parfois des "#test" et parfois le nom du noeud soit speciesReference. Le problème vient donc apperemment de ce que contient le noeud, je l'ai peut être mal récupéré :s.

    Voila, je suis pas sure d'avoir été claire :s, en esperant que quelqu'un sera m'aider parce que j'avoue que je sèche.

    Merci beaucoup d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 4
    Par défaut
    j'ai oublié de préiser que mon getAttribute('id') récuppère bien l'id de chaque réaction.
    Bonne soirée et encore merci.

Discussions similaires

  1. problème avec XML::parser
    Par mbhfr06 dans le forum Modules
    Réponses: 4
    Dernier message: 23/08/2007, 14h15
  2. parser du xml avec java
    Par 080983 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 30/07/2007, 09h56
  3. [DOM] Erreur parser fichier xml avec caractère spéciaux
    Par turcotm dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 19/06/2006, 09h01
  4. problème pour parser un fichier xml avec XML::Simple
    Par black_code dans le forum Modules
    Réponses: 3
    Dernier message: 30/01/2006, 19h32
  5. [DOM XML] Comment parser du XML avec une version 4.3 ?
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/10/2005, 15h52

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