Je dirais :
'[' .
$_->findvalue('count(./preceding-sibling::*[name()=name(current())]) +
1') . ']'
J'etais en train d'essayer de faire le meme en xslt, j'arrive à ça :
<xsl:template name="xpath">
<xsl:for-each select="ancestor-or-self::*">
<xsl:text>/</xsl:text>
<xsl:value-of select="name()"/>
<xsl:if test="count(ancestor::*)">
<xsl:text>[</xsl:text>
<xsl:value-of select="1
+count(preceding-sibling::*[name()=name(current())])"/>
<xsl:text>]</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
(avec le raffinnement de la racine :)
Par contre je me pose une question : cela ne arche que pour les
élements, je voudrait améliorer mon template pour qu'il fonctionne pour
les noeuds texte, comment, PI et attributs, il est facile de detecter
que le noeud courant est text(), comment(), processing-instruction(),
mais comment tester si le noeud courant est un attribut ? et comment
récupérer le nom de cet attribut ?
Steph.
Le vendredi 15 avril 2005 à 14:35 +0200, Robin Berjon a écrit :
> VASEUX Mickaël wrote:
> > Je cherche dans Xerces le moyen d'obtenir, à partir d'un élément,
> > l'expression XPATH désignant cet élément.
> > Existe t-il une fonction capable de faire ça?
>
> En Perl avec XML::LibXML c'est (considérant que $el contient l'élément
> en question):
>
> my $xpath = '/' . join '/',
> map {
> $_->nodeName .
> '[' . $_->findvalue('count(./preceding-sibling::*) + 1') . ']'
> }
> $el->findnodes('./ancestor-or-self::*');
>
> Comme c'est du DOM et de l'XPath, ça devrait se traduire facilement :)
>
--
Stéphane Bonhomme -- Exselt Services
Formations, Conseil et Réalisations en Ingénierie Documentaire,
Technologies Web et Logiciels Libres
s.bonhomme@wanadoo.fr - http://www.exselt.com
04 76 17 09 40 / 06 88 57 27 08
--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !
Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).
Cette liste est a votre disposition pour discuter en francais de
tout sujet technique lie a XML.
Pour resilier votre abonnement, envoyez un message contenant
la commande "unsubscribe" a xml-tech-request@xmlfr.org
(mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)
Received on Fri Apr 15 16:58:21 2005