Journal du Net > Développeurs > Contributions > Soumettez votre meilleure astuce XML

APPEL
A CONTRIBUTION

Vous exploitez XML au quotidien pour manipuler vos données ou développer vos sites et applications ? Vous avez certainement une astuce à partager !

Participez

 Parser efficacement du XML  

Geoffroy Vergne , Paris

Quel est en 3 lignes l'objectif de votre astuce ?

Le but est d'expliquer par l'exemple les 3 techniques les plus utilisées pour parser efficacement des fichiers XML.

Décrivez votre astuce en détail. N'hésitez-pas à inclure des portions de codes.

Cette astuce comprend 3 parties, les 3 parsers les plus utilisés et languages de programmation se prétant bien à XML.

Le fichier XML qui sert d'exemple :
-------------------------



1258ad563
testa
cattest1


854dfr632
testb
cattest2


87fgb578d
testc
cattest3


-------------------------

1er SIMPLE XML en PHP
Afin d'extraire du contenu dans des pages web dynamiques.
XML Simple a été développé pour permettre le chargement de fichiers de configuration en XML. En fait il peut être utilisé pour charger en mémoire, sous forme d'un arbre assez simple, tout fichier XML (qui tient en mémoire bien sûr).
-------------------------
product;

foreach ($product as $product)
{
//on liste les noeuds par raport au noeud principal
echo"
{$product->id}

{$product->name}

{$product->category}

";
}
?>
-------------------------

2eme DOM XML en PERL
Pour retraiter ou extraire des données en tache de fond de façon automatisé.
Dom copie en mémoire la totalité le l'arbre XML et peut récupérer n'importe quel élément à n'importe quel moment.
C'est intéréssant pour les arbre complexes mais pas trop volumineux sinon il y a un risque de saturation de la mémoire.
XML::DOM est une implémentation du standard DOM niveau 1, plus quelques extensions. C'est un des modules XML les plus populaires
Un exemple de script utilisant XML::DOM.
XML::DOM est basé sur XML::Parser et offre une interface SAX. Il est distribué dans le bundle libxml-enno.
-------------------------
#!/usr/bin/perl

#on définie l'utilisation de DOM
use XML::DOM;

#On définie le parser
my $parser = new XML::DOM::Parser;

#On parse le fichier
my $doc = $parser->parsefile('file.xml');

#on liste les noeuds par raport au noeud principal
my $nodes = $doc->getElementsByTagName ("product");
my $n = $nodes->getLength;

for (my $i = 0; $i < $n; $i++)
{
my $node = $nodes->item ($i);

#on récupère le contenu des noeud
my $id = $node->getElementsByTagName("id")->item(0)->getChildNodes()-
>item(0)->getNodeValue();
my $name = $node->getElementsByTagName("name")->
item(0)->getChildNodes()->item(0)->getNodeValue();
my $category = $node->getElementsByTagName("category")->item(0)->
getChildNodes()->item(0)->getNodeValue();

print $id."n";
print $name."n";
print $category."n";
}

-------------------------

3eme SAX pour parser de grosses quantité de données dans des flux XML.
SAX parcour les noeuds de l'arbre sans garder la structure en mémoire, il est donc beaucoup plus rapide que DOM mais il est limité à des arbres relativement simples.
Sax définit une interface événementielle permettant la communication entre différents modules XML. XML::DOM, XML::Grove, XML::Path, entre autres, offrent une interface SAX.
XML::Parser::PerlSAX est un module dont le parser génère des événements SAX.
-------------------------
#!/usr/bin/perl

#on définie l'utilisation de SAX
use XML::Parser;
use strict;

#On définie le parser
my $parser = new XML::Parser('Style' => 'Subs' );
$parser->setHandlers('Char', &char_handler);
$parser->parsefile('file.xml');

my ($id, $name, $category, $s_chars);

#fonctions pour récupèrer le contenu des noeuds
sub id { $s_chars = ""; }
sub id_ { $id = $s_chars; }

sub name { $s_chars = ""; }
sub name_ { $name = $s_chars; }

sub category { $s_chars = ""; }
sub category_ { $category = $s_chars; }

#fonction pour lister les noeuds par raport au noeud principal
sub product_ {
print $id."n";
print $name."n";
print $category."n";
}

sub char_handler {
shift;
$s_chars .= shift;
}
-------------------------

Conclusion :
Il n'y a donc pas q'une seul façon de parser du XML tout dépend de vos besoin.
Pour remplir vos pages dynamiques SIMPLE XML.
Pour traiter des fichiers moyens contenant un arbre complexe : DOM XML.
Pour traiter des gros flux, SAX.

DOM SAX et SIMPLE existent en JAVA PYTHOM PHP PERL C++(XERCES) et bien d'autres ...


Publié le 21 juin 2007

  Les dernières contributions  

  En ce moment sur Journal du Net Développeur  
8 contributions : 1 2 3 4 5 6 7 8
 




 

RECHERCHE