Peu de temps pour programmer ces derniers temps, mais qu'importe, voici un petit outil programmé aujourd'hui. Il permet d'afficher les feuilles d'un document XML. En effet, j'ai eu entre les mains un fichier à convertir, il s'agissait d'un export XML provenant de BCDI. Or, je ne connaissais pas ce vocabulaire XML et je voulais illustrer une migration de données. j'avais donc besoin d'une liste des feuilles de cet arbre XML, où je pourrai tirer quelques éléments pour effectuer la pseudo migration. Aussitôt pensé, aussitôt fait.
Perl peut utiliser la libxml avec le module XML::LibXML et via cette dernière, je peux appliquer des expressions XPath sur mon fichier XML. L'expression XPath en question est **//*[count()=0]*. Le reste est vraiment simplissime.
Voici le code :
#!/usr/bin/env perl
use strict;
use warnings;
use XML::LibXML;
use Getopt::Long;
my $config = {};
GetOptions( $config, 'xml=s' );
_usage() if not _validated( $config );
my $parser = XML::LibXML->new();
my $catalog = $parser->parse_file( $config->{xml} );
my @nodes = $catalog->findnodes( '//*[count(*)=0]' );
my %leaf_nodes;
foreach my $node (@nodes) {
my $path = $node->nodePath();
$path =~ s/\[\d+\]//g;
$leaf_nodes{$path}++;
}
print ($_, $/) foreach keys %leaf_nodes;
sub _usage {
die "Usage: $0 --xml file.xml\n";
}
sub _validated {
my $config = shift;
if (exists $config->{xml}) {
return 1;
} else {
return 0;
}
}
L'outil est tellement simpliste qu'il ne me sera probablement plus utile demain, mais au moins, j'ai une base pour analyser un éventuel fichier XML en vue d'une migration. Les prochains billets traiteront d'ailleurs probablement de migration de catalogues de bibliothèques.

Laisser un commentaire