This is a little xsl stylesheet I put together to make my RSS feed look nicer when viewed in the browser.
Creating the basic feed stylesheet
The full stylesheet lives at https://www.philnewton.net/feed.xslt.xml, but the basics are below:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head>
<title>rss feed</title>
</head>
<body>
<h1>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="/rss/channel/link" />
</xsl:attribute>
<xsl:value-of select="/rss/channel/title"/>
</xsl:element>
</h1>
<div class="items">
<xsl:apply-templates select="/rss/channel/item" />
</div>
</body>
</html>
</xsl:template>
<xsl:template match="item">
<p>
<xsl:element name="a">
<xsl:attribute name="href">
<xsl:value-of select="link"/>
</xsl:attribute>
<xsl:value-of select="title" />
</xsl:element>
<br/>
<span>
<xsl:value-of select="pubDate" />
</span>
</p>
</xsl:template>
</xsl:stylesheet>
The important parts are:
<xsl:template match="/">- This builds the body of the document. It adds
a
<h1>heading that links to the main site, along with a container for feed items. <xsl:template match="item">- This displays individual items as post links with the date underneath.
Adding the stylesheet to the feed
The following line goes after the initial <?xml ?> declaration.
<?xml-stylesheet type="text/xsl" href="/feed.xslt.xml" ?>
Adding the feed title
The page title can be added dynamically from the feed by replacing the <title>
element with the following:
<xsl:element name="title"> <xsl:value-of select="/rss/channel/title"/> </xsl:element>
Tidying up the appearance
This step is totally optional, but I wanted the feed to look a little more
appealing. This goes inside the <head> element:
<style>
html {
background: #eee;
}
body {
max-width: 64em;
margin: 1em auto;
font-family: monospace;
font-size: 1.2em;
background: white;
}
h1 {
margin: 0;
background: #f6f6f6;
padding: 0.5em;
}
.items {
padding: 1em;
}
span {
color: #aaa;
font-size: 0.8em;
}
a {
color: #0047b5;
border-bottom: 2px solid transparent;
text-decoration: none;
transition: all 150ms ease;
}
a:hover {
color: #005be8;
border-bottom: 2px solid #005be8;
}
</style>
And finally, I added the following to the <head> element to make the feed
mobile-friendly:
<meta name="viewport" content="width=device-width, initial-scale=1" />
—
I don't think that many people actually visit the feed directly, but with this change it's a little friendlier when they do.