Frage

Ich bin versucht zu retreive den vorherigen Knoten in ein für-jede mit der vorhergehenden-sibling-Achse, einem filter und einem indexer, um es zu finden.

Das problem ist, ich will nur das erste Element mit dem angegebenen XPath-Selektor aber ich scheine nicht in der Lage anwenden der filter und der indexer.Der indexer scheint zu überschreiben Sie die filter so bekomme ich immer die erste vorhergehenden Geschwister eher als die erste, die den Filterkriterien entsprechen.

Ich habe versucht, indem Sie diese in eine variable innerhalb der foreach-aber da die variable nicht geändert werden, die Knotenmenge ist immer das zweite Element der vorhergehenden Geschwister-Werte.

Hier ist der relevante code (gehackt, so viel Lärm wie möglich).Wir entschuldigen uns für die umbraco-Rauschen (die XSLT-Datei wird zum erzeugen einige ziemlich komplizierte markup für eine subnav, die ich nicht ändern kann problemlos).

<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>

Ich würde die zweite Auswahl der inline-aber da der indexer-filter überschreiben, die andere filter-es gibt nicht die korrekten Werte, wenn umbracoNaviHide = 1.

War es hilfreich?

Lösung

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

Dies bedeutet: wählen Sie alle vorherigen Geschwister node Elemente mit mindestens einem Kind data element ohne alias Attribut oder mit einem alias Attribut nicht gleich "umbracoNaviHide"

BEARBEITEN:Dies ist der korrekte XPath für dieses:

Ich wollte die erste vorhergehenden Knoten element, das enthält ein Daten-element hat ein Attribut Aliasname umbracoNaviHide, welche nicht enthalten der Wert 1.

preceding-sibling::node[data[@alias='umbracoNaviHide']!=1][1]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top