Вопрос

Я пытаюсь отремонтировать предыдущий узел в каждом использовании предыдущей оси Sibing, фильтр и индексатор, чтобы найти его.

Проблема в том, что я хочу только первый элемент, который соответствует XPath в селекторе, однако, кажется, я не могу применить как фильтр, так и индексатор. Индексатор, кажется, переопределяет фильтр, поэтому я всегда получаю первый предыдущий брат, а не первый, который соответствует фильтру.

Я попытался положить это в переменную внутри foreach, но поскольку переменная не может быть изменена, NoDeset всегда является второстепенным элементом, предшествующим значениям брата.

Вот соответствующий код (нарезанный как можно больше шума). Извинения за шум Umbraco (XSLT для генерации некоторой довольно сложной разметки для подпада, который я не могу легко изменить).

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

Я бы использовал второй селекторный встроен, но потому что фильтр индексатора переопределяет другой фильтр, он не дает правильных значений при umbraconavihide = 1.

Это было полезно?

Решение

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

Это означает: Выберите все предыдущие брата node элементы, имеющие по крайней мере один ребенок data Элемент без Ан alias атрибут или с alias атрибут не равен "зонтаконавиида"

РЕДАКТИРОВАТЬ: Это правильный XPath для этого:

Я хотел первый предыдущий узел элемент, который содержит элемент данных, который имеет атрибут псевдоним, называемым зонбраконависимым, который не содержит значение 1.

preceding-sibling::node[data[@alias='umbracoNaviHide']!=1][1]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top