Freitag, 23. November 2007

Labels aus RSS-Feed von Blogger.com per XSLT auslesen

Das XSLT zur Anzeige von RSS-Feeds eine prima Lösung ist muss ich sicher nicht noch einmal schreiben - das habe ich ja bereits hier getan. Was ich aber zeigen möchte ist, wie einfach es geht!

Was steht also heute auf dem Programm? "Labels ausgeben."

Nun denn. Man nehme sich einen RSS-Feed von Blogger.com - zum Beispiel diesen hier. In jedem "item"-Knoten findet man die vergebenen Labels jeweils als einzelner "category"-Knoten.
<category domain="http://www.blogger.com/atom/ns#">Spotlight</category>
<category domain="http://www.blogger.com/atom/ns#">Mac</category>
<category domain="http://www.blogger.com/atom/ns#">Apple</category>

Das die Labels zu schön getrennt zur Verfügung gestellt werden ist dahin gehend praktisch, weil man so keine wilden XPath-Konstrukte bauen muss. Möchte man nun also die Labels ausgeben, dann geht man diese Knoten am einfachsten mittels des xsl:for-each - Tags durch. Beim ersten Durchlauf (test="position() = 1") gibt man noch das Wort "Labels: " davor aus und bei allen Durchläufen - außer dem Letzten (test="position() != last()") - gibt man nach dem Label noch ein Komma aus. Das ganze kann man noch mit einem Link auf den Blog für das aktuelle Label garnieren. Und so schaut der dazugehörige XSLT-Quellcode aus:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="iso-8859-15" indent="no"/>
  <xsl:template match="/">
    <ul>
      <xsl:for-each select="rss/channel/item[position()&lt;5]">
        <li>
          <xsl:value-of select="title"/>
          <xsl:for-each select="category">
            <xsl:if test="position() = 1">
              <br/>
              <xsl:text>Labels: </xsl:text>
            </xsl:if>
            <a href="http://blog.dirkeinecke.de/search/label/{.}">
              <xsl:value-of select="."/>
            </a>
            <xsl:if test="position() != last()">
              <xsl:text>, </xsl:text>
            </xsl:if>
          </xsl:for-each>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>
</xsl:stylesheet>

Na also - ist doch ziemlich einfach. Oder?

Keine Kommentare:

Kommentar veröffentlichen