XSLT 2.0破坏了我的样式表

时间:2014-08-15 03:37:03

标签: xslt xslt-1.0 xslt-2.0

我有一个在1.0版本中开发的样式表。我需要转换为2.0版才能利用其他一些功能。然而,现在,当我使用以下语法时,我获得了所有结果,而不仅仅是第一个结果。这在v1.0中有效,但在v2.0中不起作用:

//elementName[1]

有简单的解决方法吗?

2 个答案:

答案 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元素;前者选择所有后代段   这些元素是他们父母的第一个孩子。