2012-07-26 49 views
0

这是How can I select the first element using XSLT?的后续行动。如何使用XSLT匹配文档中的第一个元素?

<xml> 
    <news> 
     <newsitem> 
      <dateCreated>2009-09-09</dateCreated> 
      <summary>Something great happened</sumamry> 
     </newsitem> 
     <newsitem> 
      <dateCreated>2009-09-08</dateCreated> 
      <summary>Something bad happened</sumamry> 
     </newsitem> 
    </news> 
    <news> 
     <newsitem> 
      <dateCreated>2009-09-07</dateCreated> 
      <summary>Something really bad happened</sumamry> 
     </newsitem> 
    </news> 
</xml> 

如何能够匹配文档中的第一newsitem元素?在另一个问题中争执的xsl:template match="//newsItem[1]"会得到第一个孩子。 xsl:template match="(//newsItem)[1]"无效。我已经得到了唯一的其他线索涉及做的钥匙一些复杂的/乱七八糟的东西,好像应该有一个更好的答案,

回答

0

如果我理解这个问题,我认为你应该使用:

<xsl:template match="//news[1]/newsitem[1]"> to select the first item of all. 
+0

不幸的是,我的真实情况我不能这些假设。 – user833970 2012-07-26 21:36:17

0

没有简单的匹配模式可以选择文档中名称为newsitem的第一个元素。你可以用一个谓语做到这一点:

match="newsitem[not(preceding::newsitem)]" 

但表现很可能是可怕的。

随着XSLT 2.0的最佳解决方案是一个全局变量和测试绑定它:

<xsl:variable name="first-newsitem" select="(//newsitem)[1]"/> 

<xsl:template match="newsitem[. is $first-newsitem]"/> 
0

在XSLT 1.0可以使用这个

newsitem[not(ancestor::newsitem or preceding::newsitem)] 
相关问题