如何使用XSLT匹配文档中的第一个元素?

时间:2012-07-26 15:43:32

标签: xml xslt

这是对How can I select the first element using 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]"无效。我得到的唯一其他提示涉及用键做一些复杂/杂乱的东西,似乎应该有更好的答案,

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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]"/>

答案 2 :(得分:0)

在XSLT 1.0中,可以使用

newsitem[not(ancestor::newsitem or preceding::newsitem)]