随笔 - 58  文章 - 0  评论 - 275  16

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)

posted on 2008-12-24 10:02  Allan.  阅读(...)  评论(... 编辑 收藏