本文介绍了XSLT:获取定义了指定值的最近项?(施泰科尔)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有当前结构;

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

我有一个仅在"Item 1"上定义的字段。我们称其为"Header"。

当我在"Item 1"上时,很容易提取这个值,但是当我在其他项目上时呢?有没有一种方法可以遍历树(向上),直到我找到一个名为"Header"的字段并且它有一个值,然后停下来并将其用作我的子项中的参考点?

推荐答案

如果要查找树并查找包含具有值的标头属性的最接近元素,则应该可以执行以下操作。

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

这使用ancestor轴查找树,XPath表达式查找具有属性且值不为空的任何元素。

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

编辑:另一种查找相同结果的方法是,利用ancestor轴以文档反向顺序返回这一事实,将过滤条件放入ancestor轴步骤的谓词中,选择第一个条件(与上下文节点最匹配),然后进入@Header:

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

这篇关于XSLT:获取定义了指定值的最近项?(施泰科尔)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-30 09:07