Цикл в XSLT - PullRequest
       10

Цикл в XSLT

0 голосов
/ 09 февраля 2011

У меня есть следующий XML

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="sample.xsl" type="text/xsl"?>
<rss version="2.0"
 xmlns:atom="http://www.w3.org/2005/Atom"
 xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
 xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel
     xmlns:cfi="http://www.microsoft.com/schemas/rss/core/2005/internal">
        <title cf:type="text">The Hindu - Front Page</title>
        <link>http://www.hindu.com/</link>
        <description cf:type="text">The Internet edition of The Hindu,
            India's national newspaper</description>
        <image>
            <url>http://www.hindu.com/hindu/hindux.gif</url>
            <title>hindu.com</title>
            <link>http://www.hindu.com/</link>
        </image>
        <item>
            <title cf:type="text"
             xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
             >ISRO spectrum deal under review: Centre</title>
        </item>
        <item>
            <title cf:type="text"
             xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
             >Response from Devas</title>
        </item>
    </channel>
</rss>

Значение rss / channel / item может быть любым (в текущем случае это число равно 2). Мне нужно отображать заголовки как шатер один за другим следующим образом

Рассматриваемая сделка по спектру ISRO: Центр, Ответ от Devas, ...., ....

Как я могу сделать это в XSLT? добрый совет

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:cfi="http://www.microsoft.com/schemas/rss/core/2005/internal"
    xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    exclude-result-prefixes="cfi cf dc">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/*">
        <div id="marquee">
            <xsl:apply-templates select="channel/item/title"/>
        </div>
    </xsl:template>

    <xsl:template match="title">
        <xsl:value-of select="."/>
        <xsl:if test="not(position() = last())">, </xsl:if>
    </xsl:template>

</xsl:stylesheet>

Результат по вашему образцу:

<div id="marquee">ISRO spectrum deal under review: Centre, Response from Devas</div>
1 голос
/ 09 февраля 2011

В дополнение к @Flack правильному ответу, в XSLT 2.0 xsl:value-of инструкция сохраняет последовательность. Итак, эта таблица стилей:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <div id="marquee">
            <xsl:value-of select="rss/channel/item/title"
                          separator=", "/>
        </div>
    </xsl:template>
</xsl:stylesheet>

Также выводит:

<div id="marquee"
 >ISRO spectrum deal under review: Centre, Response from Devas</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...