1

我不确定我是否真的做错了,或者这是否不能正常工作:

<xsl:if test="position() = 1 or parent::position() = 1">
   <!-- do something -->
</xsl:if>

如果当前节点是第一个孩子,或者它的父节点是第一个孩子,那么做一些特别的事情。

问题是“parent::position() = 1”.. 使用.net 的 XmlCompiledTransform 我得到

表达式的预期结尾,发现 '('。...sition() = 1 或父 ::position -->(<-- = 1。

现在,显然它不喜欢第二部分中的那个 position() 函数,但是..我如何获得父母的位置?通常,我如何在测试中将 XPath 函数与 XPath结合起来?

4

1 回答 1

2

好问题,+1。

您需要定义parent的位置是什么意思。

parent::node()[position() = 1] 

总是true()当父节点存在时(false()仅当上下文节点是文档节点/时,因为该节点是树中的顶部节点并且没有父节点),因为树中的任何节点(格式良好的 XML 文档)根据定义,最多可以有一个父节点。

最有可能的是,您想测试父元素是否是其兄弟元素中文档顺序中的第一个。对此进行测试的一种方法是:

not(parent::node()/preceding-sibling::*)

所以,完整的代码变成

<xsl:if test="position() = 1 or not(parent::node()/preceding-sibling::*)">        
   <!-- do something -->        
</xsl:if>        
于 2011-12-01T13:16:23.643 回答