XSL : Connaitre la position d'un noeud XML dans une collection

17-05-2013
Laurent Bientz

Imaginons un flux XML composé d'une collection d'une même famille (staff par exemple) et que vous souhaitez connaitre en XSL la position d'un noeud dans cette position à partir d'un prédicat where ([] en xPATH).

Reprenons le flux XML du billet précédent légèrement modifié:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <View>
        <wandiz>
            <staff>
                <id>1</id>
                <name>Laurent Bientz</name>
            </staff>
            <staff>
                <id>2</id>
                <name>Florian Collot</name>
            </staff>
            <staff>
                <id>3</id>
                <name>Kevin Lancien</name>
            </staff>
            <staff>
                <id>4</id>
                <name>Nicolas Nowak</name>
            </staff>
            <staff>
                <id>5</id>
                <name>Jacques De Lamballerie</name>
            </staff>
            <staff>
                <id>6</id>
                <name>Katty Dida</name>
            </staff>
            <staff xp="iOs">
                <id>7</id>
                <name>Loic Couharde</name>
            </staff>
            <staff>
                <id>8</id>
                <name>Julien Quievreux</name>
            </staff>
            <staff>
                <id>9</id>
                <name>Jean-Baptiste Chateaux</name>
            </staff>
            <!-- ... -->
        </wandiz>
    </View>
</root>

Ici, nous souhaitons connaitre la position de Loic Couharde dans la collection wandiz/staff à partir de son xp "iOs" :

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xmlns="http://www.w3.org/1999/xhtml">
    <xsl:template name="whereIsSteveJobs">
        <xsl:variable name="iOsPosition" select="count(//View/wandiz/staff[@xp = 'iOs']/preceding-sibling::*)+1" />
        Position n°<xsl:value-of select="$iOsPosition" /> in /wandiz/staff
    </xsl:template>
</xsl:stylesheet>


 

Prodan - 2013-09-02 03:51:42
Your example worked like a charm. Works great for an upcoming project/requirement I have. What I need now is an example of how to limit the number of feeds. I am not a programmer, so very explicit examples apprecited. Thanks for your work.
Outlet - 2013-09-04 09:18:43
Pretty! This was a really wonderful article. Thank you for supplying this information.
toms - 2013-09-12 05:04:26
Hello there! I know this is kind of off topic but I was wondering if you knew where I could find a captcha plugin for my comment form? I'm using the same blog platform as yours and I'm having difficulty finding one? Thanks a lot!
XRumerTest - 2017-05-13 13:29:07
Hello. And Bye.

Apporter votre contribution

Expérience utilisateur

Wandi vous propose de découvrir une nouvelle approche de la navigation sur un site web...
Êtes-vous prêt ?

Démarrer l'expérience