XSLT2: Comment les attributs de référence sur le nœud courant dans XPath2 prédicats

J'avais posté une autre question avec ce que l'un de ses aspects. On m'a dit de clarifier la question, mais que la question a déjà été assez long et compliqué, donc j'ai créé un nouveau.

Je veux savoir si il y a moyen standard de la référence à la actuel du nœud d'attribut dans une expression XPath de test pour un autre.

Pour un exemple, considérez les points suivants XSLT

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:for-each select="potato/stem[eye]">
        In session <xsl:value-of select="@sessionID"/>, the potato had <xsl:value-of select="/potato/stem[@sessionID=@sessionID][scc]/scc/@leafnumber"/> s.c.c. leaves.
    </xsl:for-each>
</xsl:template>

(Source XML à fond de cette question.)
(À noter que pour chacune des références des nœuds de la tige de type[oeil] mais la deuxième valeur, références demandées nœuds de la tige de type[csc], qui sont sur une branche différente de la source de l'arbre XML.)

Maintenant, évidemment, le "@sessionID=@sessoinID" partie de qui est le plus souvent vide de sens parce que XPath perçoit cela comme "La valeur de l'attribut id de session du nœud doit être égale ... la valeur de l'attribut id de session du nœud."

Mais ce que je veux dire, c'est "un Test pour s'assurer que la valeur de la seesionID attribut du nœud (l'un dans l'expression XPath) est le même que l'id de session du nœud de whatever /tige[oeil] noeud je suis aujourd'hui."

Je ne peux pas le faire avec une variable, parce que vous n'êtes pas autorisé à déclarer une variable dans une pour chaque clause.

Pour la référence, c'est la source XML. Sa structure n'est pas ce qu'on voudrait, mais c'est ce que j'ai à travailler avec.

<?xml version="1.0" encoding="utf-8"?>
<potato>
<stem sessionID="1">
    <eye number = "25"/>
</stem>
<stem sessionID="3">
    <eye number = "33"/>
</stem>

<stem sessionID="1">
    <scc leafnumber = "234" />
</stem>
<stem sessionID="2">
    <scc leafnumber = "433"/>
</stem>
<stem sessionID="3">
    <scc leafnumber = "463"/>
</stem>

<stem sessionID="1">
    <agd leafnumber = "154"/>
</stem>
<stem sessionID="2">
    <agd leafnumber = "233"/>
</stem>
<stem sessionID="3">
    <agd leafnumber = "113"/>
</stem> 
</potato>

La sortie, je suis à la recherche de:

Dans la session 1, la pomme de terre avait 234 s.c.c. les feuilles.

Dans la session 3, la pomme de terre avait 463 s.c.c. les feuilles.

(Bien sûr, cela est tout simplement sandbox exemple. Je me rends compte il y a probablement des façons de le faire au-dessus de la sortie dans une manière complètement différente, mais j'espère que cet exemple obtient dans ma question, qui est de savoir comment utiliser les valeurs associées au nœud (par exemple, dans une pour chacun) dans un prédicat pour un XPath à la recherche d'un autre.)

OriginalL'auteur David R | 2011-10-28