[Perl] Difficulté avec la méthode findnodes de XML::LibXML::Node

Sébastien Aperghis-Tramoni sebastien at aperghis.net
Mer 22 Mar 01:26:54 CET 2017


Dominique Asselineau a écrit :

> Bonjour,
> 
> La méthode findnodes du module XML::LibXML::Node demande un chemin
> qui doit être préfixé par un NameSpace.  Connaîtriez-vous le moyen
> de savoir les NameSpaces disponibles au moment d'exécuter cette 
> méthode ? Je l'ai pourtant utilisée par ailleurs sans difficulté 
> mais cette fois, je suis bloqué.  Il s'agit du format TEI.

Pas testée, mais une solution peut être de trouver tous les espaces
de noms déclarés jusqu'au nœud en question. Il ne semble pas y avoir
de solution toute faite pour cela, et il faut visiblement remonter
la hiérarchie en partant du nœud à coup de ->parentNode(), et à chaque
nœud utiliser la méthode getNamespaces() qui renvoie la liste des
espaces de nom déclarés à ce nœud :

    for my $ns ($node->getNamespaces) {
        say "- ", $ns->declaredPrefix, ": ", $ns->declaredURI;
    }

Tu accumules les NS dans un tableau ou un hash, en remontant jusqu'à
la racine du document ($dom->documentElement), moment où tu as toutes
les déclarations d'espaces de nom qui s'appliquent au nœud de départ.

-- 
Sébastien Aperghis-Tramoni

Close the world, txEn eht nepO.


Plus d'informations sur la liste de diffusion Perl