Question

J'essaie de retreive le nœud précédent dans un pour chaque fois en utilisant l'axe précédent, un filtre et un indexeur pour le trouver.

Le problème est que je veux seulement le premier élément qui correspond au XPATH dans le sélecteur cependant, je semble incapable d'appliquer à la fois le filtre et l'indexeur. L'indexeur semble remplacer le filtre, donc j'obtiens toujours le premier frère précédent plutôt que le premier correspondant au filtre.

J'ai essayé de mettre cela dans une variable à l'intérieur du foreach, mais comme la variable ne peut pas être modifiée, l'ensemble de nœuds est toujours les valeurs du deuxième élément précédent.

Voici le code pertinent (coupé autant de bruit que possible). Toutes mes excuses pour le bruit Umbraco (le XSLT est pour générer un balisage assez compliqué pour un Subnav que je ne peux pas changer facilement).

<xsl:for-each select="$currentPage/ancestor-or-self::node[(@nodeTypeAlias='Discover' or @nodeTypeAlias='CampaignHome') and data[@alias='umbracoNaviHide'] != 1]/child::node[(@nodeTypeAlias='Discover' or @nodeTypeAlias='CampaignHome') and data[@alias='umbracoNaviHide'] != 1]">  

   <!--This variable is always set to the second item's preceding sibling-->
   <xsl:variable name="precedingItem" select="preceding-sibling::node[data[@alias='umbracoNaviHide' != 1]]" />

   <!--This variable always contains the second item even if /data/@alias='umbracoNaviHide' = 1 -->
   <xsl:variable name="predingItemWithIndexer" select="preceding-sibling::node[data[@alias='umbracoNaviHide' != 1]][1]" /> 

     <!--  this always prints out the id of the first item -->
     <xsl:value-of select="position()" /> <xsl:value-of select="$precedingItem[1]/@id" />
</xsl:foreach>

J'utiliserais le deuxième sélecteur en ligne, mais parce que le filtre indexeur remplace l'autre filtre, il ne donne pas les valeurs correctes lorsque UmbraconAviHide = 1.

Était-ce utile?

La solution

preceding-sibling::node[data[@alias='umbracoNaviHide' != 1]]

Ça signifie: Sélectionnez tous les frères et sœurs précédents node des éléments ayant au moins un enfant data élément sans un alias attribut ou avec un alias Attribut non égal à "Umbraconavihide"

ÉDITER: C'est le bon XPATH pour ceci:

Je voulais le premier élément de nœud précédent qui contient un élément de données qui a un alias d'attribut appelé Umbraconavihide qui ne contient pas la valeur 1.

preceding-sibling::node[data[@alias='umbracoNaviHide']!=1][1]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top