Silverlight对于搜索引擎来说是不可被搜索的,因为所有的文本信息都被包含在Silverlight控件内以XAML的方式Render的,而不是以XHTML方式。Synergist提出了用ASP.NET + XSLT来将Silverlight的内容同时转换成对应的XHTML在同一页面上以隐藏的DIV等标签来输出,这样所有的内容就可以被搜索引擎搜索。
通过使用<asp:XML>控件并指定相应的XSLT样式表,我们可以到到这样的效果:
<div id="SLHost" style=”Display:none”> <asp:Xml ID="XHTML" runat="server" DocumentSource="seo.xaml" TransformSource="XAML2XHTML.xslt" EnableViewState="False"/> <script type="text/javascript"> createSilverlight(); </script> </div> |
在转换的XSLT中,实现了下边的转换规则:
· <Canvas>元素转换成<div>标记
· <TextElement>元素转换成容纳文本的<div>标记
· <Run>元素转换成<span>标记
· <Image>元素转换成<img>标记
· <MediaElement>元素转换成<a>超链接标记
当然,你还可以定义自己的映射规则,毕竟这些是不需要显示出来的,仅仅是隐藏在生成的XHTML中而已。当然你也不用关心样式了。来看看这个简单的XSLT实现了什么:
<?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:sl="http://schemas.microsoft.com/client/2007" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="sl"> <xsl:output omit-xml-declaration="yes" indent="yes" /> <xsl:template match="/"> <xsl:comment>This is the text that is in the Silverlight XAML:</xsl:comment> <xsl:apply-templates select="*" /> </xsl:template> <xsl:template match="sl:Canvas"> <div> <xsl:apply-templates select="*" /> </div> </xsl:template> <xsl:template match="node()" /> <xsl:template match="sl:Image"> <div> <img src="{@Source}" /> </div> </xsl:template> <xsl:template match="sl:MediaElement"> <div class="Media"> <a href="{@Source}">Media</a> </div> </xsl:template> <xsl:template match="sl:TextBlock"> <div> <xsl:value-of select="@Text" /> <xsl:value-of select="text()" /> <xsl:apply-templates select="*" /> </div> </xsl:template> <xsl:template match="sl:LineBreak"> <br /> </xsl:template> <xsl:template match="sl:Run"> <span> <xsl:value-of select="@Text" /> <xsl:value-of select="text()" /> </span> </xsl:template> </xsl:stylesheet> |
Synergist还未我们做了例子,不妨试一下吧。很好的tip:)
(原文地址:http://blogs.msdn.com/synergist/archive/2007/10/03/simple-silverlight-seo-with-asp-net-and-xslt.aspx)