使用xsl:number with level =“any”来获得更精细的节点上下文指示

时间:2013-11-27 18:28:52

标签: xml xslt xpath

我正在使用xsl:number这样:

<xsl:number level="any" count="something" format="1" />

获取一个数字,该数字大致对应于文档中当前“某事物”节点的索引。这很有帮助,但我需要更详细地说明我在文档中的位置。我正在使用XSL 2.0创建子文档,我想让我的编号对应于子文档。

所以我想知道是否有人在使用xsl:number上的count属性有任何使用XPATH的经验来完成此任务?如果指定一个更智能的计数值来限制“某事物”的范围,那就太棒了。

我似乎无法获得有效的XPATH。我试图将计数限制在某个父级下的某个东西,其中父级可以嵌套

 grandparent
           | 
           parent
                |
                something
                something
                something
                parent
                     |
                     something
                     something

所以,我希望我可以做类似的事情:

count="ancestor::parent[1][child::something]"

换句话说,当前父节点下的“Something”计数。我不确定这是可能的。另外一种方法的想法也值得欢迎。

编辑: 刚刚发现了“from”属性。我认为这可能有用。

第二次编辑: 我能够使用Ian Roberts的建议使用'preceding ::'而不是'preceding-sibling'来实现这一点。我会将答案标记为正确,因为它非常接近。

2 个答案:

答案 0 :(得分:1)

您可以在不使用xsl:number

的情况下执行此操作
<xsl:value-of select="count(ancestor-or-self::something[1]/preceding-sibling::something) + 1"/>

即。当前节点所在之前的某些事物的数量。如果您对第一个编号为0而不是1而感到高兴,请删除+1。

如果something元素并非都被称为同名,那么您需要获得更多创意,例如:使用ancestor-or-self::*[parent::parent][1]获取以下 parent级别的最近祖先,无论该祖先可能被调用。

答案 1 :(得分:0)

你的部分文字描述'我试图将数量限制在某个父母的某个地方'听起来好像只是想要<xsl:number level="single" count="something"/>。如果这不符合您的要求,请提供示例XML和您想要生成的相应编号。