部分页面缓存 - 通过 XSL 消费和显示 RSS XML 订阅源






3.50/5 (4投票s)
2006年7月28日
4分钟阅读

38384

207
关于部分页面缓存以及通过 XSL 消费和显示 RSS XML 订阅源的提示
引言
这篇技巧文章简要介绍了三个方面
- 使用 RSS 馈送(不难)
- 部分页面缓存(不难),以及
- 通过 XSL 模板将 XML 数据呈现为 HTML(不难)
我决定把这些内容整合在一起,因为我最近想在我的网站上添加一些 RSS 馈送内容,但似乎找不到提供我所需确切技术指导的文章。这并不是说这篇技巧文章是完整的,但这正是我所需要的。如果代码有重用,那是因为编写此代码的方法很少。这里的想法只是将一些简单的概念结合起来以进行实际应用。
如您所知,有许多很棒的免费 RSS 馈送供任何人使用,对于像我这样的小型网站,这些馈送可以提供良好的补充性和权威性内容。但不太好的是,使用这些馈送通常会减慢您的网站速度,尤其是在有多个馈送需要使用时。在某些情况下,它们甚至会导致 IIS 完全锁定。我的网站(甚至主页)主要都是动态的——我无法缓存整个页面,因为除了 XML 数据之外,许多内容都会频繁更改。我发现对 XML 数据进行部分页面缓存是一个不错的解决方案。
我希望有一种简洁且**简单**的方式来呈现 RSS XML 内容。使用 XSL(可扩展样式表语言)模板是可行的办法。我学习了一些很酷(并不复杂)的 XSL 技巧,我认为应该分享一下。
Using the Code
用户控件
部分页面缓存非常简单。您只需要为要缓存的页面每个区域创建一个用户控件(页面片段),在本例中,它只不过是一个常规的.aspx页面,但扩展名为.ascx。您需要在该页面的头部设置缓存超时参数,而不是在宿主.aspx文件中。
<%@ OutputCache Duration="120" VaryByParam="none" %>
(持续时间以秒为单位,因此上述页面缓存将在 2 分钟后过期。)
VaryByParam
是必需的,即使您不使用它也是如此。如果您确实想要根据 URL 参数创建不同版本的缓存,那么VaryByParam
就是实现此目的的方法。例如,我可以根据“PgID
”参数创建我的default.aspx页面的不同实例……
http://www.celebsafari.com/default.aspx?PgID=4
……
<%@ OutputCache Duration="120" VaryByParam="PgID" %>
您可以使用缓存做更多的事情(控件等),但这对于本例来说已经足够了。
至于使用 XML 流,几乎每个人都知道如何操作,所以我不会逐行讲解。但我确实想指出,在尝试获取响应之前,您绝对应该使用timeout
参数。此外,请确保在请求过程中使用一些异常处理。与页面缓存中的持续时间不同,请求超时的持续时间以毫秒为单位。
WebRequest request = WebRequest.Create(MyStream);
request.Timeout=10000;
WebResponse response = request.GetResponse();
XSL
使用 .NET asp:xml
服务器控件,您可以应用 XSL 模板并将 XML 数据转换为格式良好的 HTML(如果您愿意,也可以转换为文本)。虽然我的示例很简单,但您可以使用 XSL 做更多很酷的事情。有数十个 XSL 示例和工具可以帮助您入门,但我将指出我的循环块中的一些内容。
此块将检查当前位置,确保显示的结果少于 10 个。
<xsl:if test="position() > 11">
...
</xsl:if>
设置 XSL target 属性将确保hrefs在新浏览器中打开。
<xsl:attribute name="target">_new</xsl:attribute>
与我主机页面上的链接不同,我不希望我的 XML 链接带下划线。我以小字体显示它们,并且链接太多了——如果带下划线,将难以阅读。
<xsl:attribute name="style">text decoration:none</xsl:attribute>
有些人认为这是一种捷径,但我需要确保像"这样的标记不会输出为",如果不使用 DOE 属性,它们就会这样输出。不使用 DOE 的论点并不适用于此示例/用法。
<xsl:value-of select="title" disable-output-escaping="yes" />
ASPX 页面
这是最简单的一部分。只需注册您的用户控件(.ascx文件)。
<%@ Register tagPrefix="myCtrls" tagName="rss" Src="rss.ascx" %>
注册控件后,您可以在页面的任何位置使用它。
<html>
<body>
<div align="left"><myCtrls:rss runat="server" /></div>
<body>
</html>
关注点
您应该能够将三个附加文件保存在本地 Web 根目录中,并在浏览器中访问https:///rss.aspx中的示例。
您可以在我的网站上查看此代码的实际效果,网址为 http://www.celebsafari.com/。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。