0

这是如何使用 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]"无效。我得到的唯一其他提示涉及用钥匙做一些复杂/凌乱的事情,似乎应该有更好的答案,

4

3 回答 3

0

在 XSLT 1.0 中可以使用这个

newsitem[not(ancestor::newsitem or preceding::newsitem)]
于 2012-07-27T01:36:24.577 回答
0

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

<xsl:template match="//news[1]/newsitem[1]"> to select the first item of all.
于 2012-07-26T16:27:20.040 回答
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]"/>
于 2012-07-26T22:25:04.060 回答