Donnez-moi vos feuilles !

| Aucun Commentaire | Aucun Trackback

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.

Aucun Trackback

URL de Trackback : http://blog.bjornoya.be/mt-tb.cgi/11

Laisser un commentaire

À propos de cette note

Cette page contient une unique note de manu publiée le 8 octobre 2009 21h34.

Le collectionneur de liens est la note précédente de ce blog.

Aidez-moi à remplir mon buffer est la note suivante de ce blog.

Retrouvez le contenu récent sur l'index principal ou allez dans les archives pour retrouver tout le contenu.

Pages

Powered by Movable Type 4.261