One of the great features of the Content Query web part is that, once you configure it and have it showing the content that you want, you can have it emit an RSS feed of the same content. So, if you have a Content Query web part showing the latest news articles published on the site, you can offer readers an RSS feed of this same content for them to subscribe to.
One question that comes out of this is, "How can I change the output of the RSS feed?" For example, let's say you want to emit a different column of your data as the feed item title or description. Or, let's say you wanted to offer the feed in a different format, such as Atom.
Let's first take a closer look at the feed that is emitted by the Content Query web part. Here, I have a CQWP showing the latest news articles on my site, and it has a feed enabled. By the way, to enable a feed on a Content Query web part, simply edit the web part, expand the Presentation section, and check the Enable Feed box.
If I click through to the feed, I see a preview of it in IE7, and I can subscribe to it from here. The URL of the feed in this case is http://<servername>/_layouts/feed.aspx?xsl=1&web=%2FNews%2FEnglish&page=fe5ab523-46d2-4285-a095-d590ca8975a5&wp=4144557a-1f5e-4ebf-9ec7-9b1525df1e43
The query string parameters after the feed.aspx page are the key here. They are:
The xsl to use to produce the feed
Registered xsls in the web.config file
The web where the CQWP lives that is emitting this feed
The page where the CQWP lives that is emitting this feed
The CQWP ID
Feed.aspx effectively "looks up" the Content Query web part that is emitting the feed, figures out the query it runs, runs the same query, but instead of outputting HTML, it outputs feed xml by using the XSL in question.
Now, you may be wondering what "XSL=1" is referring to. That's not a path to an XSL file. Instead of feed.aspx supporting the ability to run XSLs here, we wanted to make it something that the admin could manage. So, only XSLs that are registered in the web.config file can be used by feed.aspx. Looking at the web.config for this site, you'll find the following line:
<add key="FeedXsl1" value="/Style Library/Xsl Style Sheets/Rss.xsl" >
This is the out of box registered XSL. You'll notice it lives in the Style Library, right next to the XSLs used to render content in the Content Query web part.
If I wanted to have my own XSL be used for CQWP RSS feeds, I could do a couple of things. First, I could edit this XSL file. Then, all CQWPs would use this updated XSL file to render the feeds. However, if I want something custom that pertains to just one Content Query web part, it makes more sense to add my own XSL file.
To do that, you need to do the following:
<add key="FeedXsl1" value="/Style Library/Xsl Style Sheets/Rss.xsl" />
<add key="FeedXsl2" value="/Style Library/Xsl Style Sheets/Rss-custom.xsl" />
<xsl:variable name="FeedUrl1" select="concat($SiteUrl,$FeedPageUrl,'xsl=1&web=',$WebUrl,'&page=',$PageId,'&wp=',$WebPartId)" />
<xsl:variable name="FeedUrl1" select="concat($SiteUrl,$FeedPageUrl,'xsl=2&web=',$WebUrl,'&page=',$PageId,'&wp=',$WebPartId)" />
The property in question here is:
<property name="MainXslLink" type="string" />
For my web part, I'd say:
<property name="MainXslLink" type="string">/Style Library/XSL Style Sheets/ContentQueryMain-custom.xsl</property>
That's it! I now have the ability to have a Content Query web part that's emitting an feed in a custom way. Hopefully people find this helpful. And, if people do customize the Content Query web part feeds in this manner, please post a comment and tell us what you did.
--George Perantatos, Program Manager