2009-09-30 9 views
28

J'ai une liste de nouvelles, triées par dateCreated. J'ai un contrôle de boîte d'aperçu où je veux seulement montrer le premier article. Comment puis-je faire cela en utilisant XSLT?Comment puis-je sélectionner le premier élément en utilisant 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> 

Répondre

46

Si vous souhaitez sortie XHTML 1.1, voici une façon:

<?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

Génial, merci! –

+0

Le problème avec [1] est que si j'ai aussi besoin de traiter les noeuds normalement, le premier noeud a été consommé. Ainsi, si tous les éléments d'information doivent être traités, mais que le premier doit être traité spécialement (comme les en-têtes de tableau de sortie), l'utilisation de cette approche ne fonctionnera pas. J'espère trouver ça. – tggagne

+0

@tggagne Vous ne savez pas exactement ce que vous entendez par "consommé". Si vous avez besoin de faire des en-têtes, faites-le plus haut dans l'arbre, c'est-à-dire 'match =" // news [newsitem] "', puis apply-templates à l'intérieur de celui-ci. – brianary

14
//newsItem[1] 

devrait faire

+3

XPath commence à compter à 1. – Tomalak

+1

woops, mon erreur – knittl

6

J'ai eu la même question et je pense avoir trouvé une meilleure réponse:

<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] 

Sélectionne le premier élément livre newsItem, mais notez que IE5 et a plus tard mis en œuvre que [0] devrait être le premier noeud, mais selon la norme W3C, il devrait être [1]!

Questions connexes