如何使用XSLT选择第一个元素?

Joh*_*ski 30 html xml xslt

我有一个新闻项目列表,按dateCreated排序.我有一个预览框控件,我只想显示第一个项目.我怎么能用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>
Run Code Online (Sandbox Code Playgroud)

bri*_*ary 48

如果你想输出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>
Run Code Online (Sandbox Code Playgroud)

  • 看来你无法在匹配中添加变量.所以我在apply-templates中添加了它.像这样:<xsl:apply-templates select ="book/chapter [position()= $ chapter]"/>它有效! (3认同)

kni*_*ttl 15

//newsItem[1]
Run Code Online (Sandbox Code Playgroud)

应该做

  • XPath开始计为1. (3认同)

mmo*_*sen 7

我有同样的问题,我想我找到了一个更好的答案:

<xsl:for-each select="newsItem[1]">
  <div><xsl:value-of select="dateCreated"/></div>
  <div><xsl:value-of select="summary"/></div>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)