我不确定我是否真的犯了错误,或者这是不是正常工作:
<xsl:if test="position() = 1 or parent::position() = 1">
<!-- do something -->
</xsl:if>
如果当前节点是第一个孩子,或者它的父母是第一个孩子,那么做一些特殊的事情。
问题是“parent :: position()= 1”..带.net的XmlCompiledTransform我得到了
表达式的预期结束,找到'('。... sition()= 1或parent :: position - &gt;(&lt; - = 1。
现在,显然它不喜欢第二部分中的position()函数,但是..我如何得到父母的位置?通常,我如何在测试中将 XPath函数与XPath结合起来?
答案 0 :(得分:2)
好问题,+ 1。
您需要定义父的位置的含义。
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>