本文介绍了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:获取定义了指定值的最近项?(施泰科尔)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!