XSLT:获取定义与规定值最接近的项目吗? (Sitecore的)(XSLT: Get the

2019-10-19 11:55发布

我目前的结构;

Item 1
 - Subitem 1
 - Subitem 2
 - Subitem 3
 - - Sub subitem 1
 - - Sub subitem 2
 - - Sub subitem 3
 - - etc

我有一个只能在“项目1”中定义的字段。 让我们把它叫做“标头”。

当我在“项目1”,它很容易提取此值,但对于当我在其他项目? 有没有一种方法我可以去通过树(最多),直到我找到一个名为“标题”字段,它有一个值,然后停下来,用这个作为我的子项的参考点?

Answer 1:

如果你想看看这棵树,发现包含值的属性最接近的元素,这样的事情应该工作。

  <xsl:value-of select="(ancestor::*/@Header[.!=''])[last()]" />

它使用ancestor轴来查找树和XPath表达式查找与页眉属性是谁的价值元素不是空的。

第二滤波器用于评估的最后一个。 如果是具有一个以上的祖先@Header用一个值, 最后一个将是最接近上下文节点,因为结果是文档顺序

编辑:一种替代的方式找到了相同的结果,利用以下事实: ancestor相反的文档顺序轴返回将是把过滤标准在断言对于ancestor轴步骤中,选择第一个(最匹配的上下文节点) ,然后步入@Header:

<xsl:value-of select="ancestor::*[@Header!=''][1]/@Header" />


Answer 2:

如果您目前的情况下是不是Item 1 ,但其子,而一个,你可以使用ancestor轴来获取其数据。

因此,假设您的Item 1元具有称为属性Header ,你可以这样做:

<xsl:value-of select="ancestor::Item1/@Header"/>

这是假设你的XML结构(你真的应该在你的问题已经提供)看起来是这样的:

<Item1 Header="a header">
  <Subitem1/>
  <Subitem2/>
  <!-- etc -->
</Item1>

而那名“项目1”是在这个结构中是独一无二的。



文章来源: XSLT: Get the closest item with a specified value defined? (Sitecore)
标签: xslt sitecore