XSLT. Как вывести N элементов из списка

Дан фрагмент XML:

<Data>стр1</Data>
<Data>стр2</Data>
<Data>стр3</Data>
...
<Data>стрN</Data>

Нужно вывести произвольное (вычисленное ранее в параметрах этого же XML) количество строк. Порядок строк не играет роли. Сортировка не нужна.

Например, если задано 2, то должно быть в результате

стр1
стр2

или

стр3
стр2

Ответы (1 шт):

Автор решения: Yitzhak Khabinsky

Используя предикат XPath и функцию position().

Входной XML

<?xml version="1.0" encoding="utf-8"?>
<root>
    <Data>value1</Data>
    <Data>value2</Data>
    <Data>value3</Data>
    <Data>valueN</Data>
</root>

XSLT

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="text" encoding="utf-8" indent="yes" omit-xml-declaration="yes"/>

   <xsl:param name="counter" select="2"/>

    <xsl:template match="/">
        <xsl:for-each select="root/Data[position() &lt;= $counter]">
            <xsl:value-of select="."/><xsl:text>&#10;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Результат

value1
value2
→ Ссылка