2009-09-30 69 views
28

我有一個新聞項目列表,按日期排序。我有一個預覽框控件,我只想顯示第一個項目。我如何使用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> 
     <newsitem> 
      <dateCreated>2009-09-07</dateCreated> 
      <summary>Something really bad happened</sumamry> 
     </newsitem> 
    </news> 
</xml> 

回答

46

如果你想輸出XHTML 1.1,這裏有一個方法:

<?xml version="1.0"?> 
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xsl xs"> 
<xsl:output mode="xhtml" version="1.1" omit-xml-declaration="yes" 
    encoding="utf-8" media-type="application/xhtml+xml" indent="no" 
    doctype-public="-//W3C//DTD XHTML 1.1//EN" 
    doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" /> 

<xsl:template match="//newsItem[1]"> 
    <div><xsl:value-of select="dateCreated"/></div> 
    <div><xsl:value-of select="summary"/></div> 
</xsl:template> 

</xsl:transform> 
+0

太棒了,謝謝! – 2009-09-30 18:19:52

+0

[1]的問題是,如果我還需要正常處理節點,第一個節點已被使用。 因此,如果需要處理所有newsitems,但第一個必須專門處理(如輸出表頭),則使用此方法將不起作用。我希望能找到。 – tggagne 2013-11-07 03:06:47

+0

@tggagne不確定你的意思是「消耗」。如果你需要做標題,可以在樹上做更高的命令,例如'match =「// news [newsitem]」',然後在其中應用模板。 – brianary 2013-11-07 20:05:35

14
//newsItem[1] 

應該做

+3

XPath開始計數爲1. – Tomalak 2009-09-30 15:35:59

+1

woops,我的錯誤 – knittl 2009-09-30 17:06:26

6

我有同樣的問題,我想我找到了一個更好的答案:

<xsl:for-each select="newsItem[1]"> 
    <div><xsl:value-of select="dateCreated"/></div> 
    <div><xsl:value-of select="summary"/></div> 
</xsl:for-each> 
1
//newsItem[1] 

選擇第一本書newsItem元素,但要注意,IE5以後已經實施了[0]應該是第一個節點,但根據W3C標準應該是[1]

相關問題