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.