我有一个1.0版的样式表。我需要转换到2.0版本,以利用一些额外的特性。但是现在,当我使用下面的语法时,我得到了所有的结果,而不仅仅是第一个结果。这在v1.0中有效,但在v2.0中不起作用:
//elementName[1]
有一个简单的解决方案吗?
XPath将在两个版本中返回相同的节点(即文档中的所有elementName
元素,它们是在各自的父元素中具有该名称的第一个子元素),但是
<xsl:value-of select="//elementName[1]"/>
将给出不同的结果。在XSLT 1.0中,当给定一组节点时,value-of
的行为是按文档顺序输出该集合中第一个节点的值,而忽略其他节点,但在2.0中,它将输出所有的值,以空格分隔。如果你想限制序列中的第一项,你应该明确地使用(....)[1]
。
是的,解决方法很简单…
(//elementName)[1]
这将给你第一个出现。前面的xpath是其父节点的第一个elementName
子节点的每个elementName
。
规范中的一个好例子:
注意:位置路径//para[1] 与的含义相同位置路径/后代::para[1]。后者选择前者后代元素;前者选择所有的后代段父元素的第一段子元素。