2011-02-09 4 views
0

У меня есть следующий XMLLooping в XSLT

<?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/канал/пункт может быть любого графа (в данном случае это отсчет 2). Мне нужно, чтобы отобразить названия как Marquee один за другим следующим

ИСРО сделки спектра под контролем: центр, ответ от Дэв, ...., ....

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

Благодарности

ответ

2
<?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> 
+0

Круто .... это работает благодаря тонну за вашу помощь. Кстати, можете ли вы предложить хорошие книги для XSL. – padLing

+0

@padLing, тогда вы должны принять ответ (просто нажмите на галочку в левом верхнем углу моего ответа). – Flack

+0

@padLing, для книг проверяйте этот вопрос: http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online – Flack

1

В дополнении к @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> 
+0

+1 - Я не знал о разделителе, несмотря на его внедрение! –