我有一个在1.0版本中开发的样式表。我需要转换为2.0版才能利用其他一些功能。然而,现在,当我使用以下语法时,我获得了所有结果,而不仅仅是第一个结果。这在v1.0中有效,但在v2.0中不起作用:
//elementName[1]
有简单的解决方法吗?
答案 0 :(得分:5)
XPath将返回两个版本中的相同节点(即文档中的所有elementName
元素,这些元素是其各自父元素中具有该名称的第一个子元素),但
<xsl:value-of select="//elementName[1]"/>
会给出不同的结果。在XSLT 1.0中,给定一组节点时value-of
的行为是按文档顺序输出集合中第一个节点的值而忽略其他节点,但在2.0中它将输出 all的值它们,用空格分隔。如果要限制序列中的第一项,则应使用(....)[1]
明确指定。
答案 1 :(得分:3)
是的,修复很简单......
(//elementName)[1]
这将首次出现。您之前的xpath是每个elementName
,它是其父级的第一个elementName
子级。
spec的一个很好的例子:
注意:位置路径// para [1] 不与...相同 location path / descendant :: para [1]。后者选择第一个 后代para元素;前者选择所有后代段 这些元素是他们父母的第一个孩子。