现在的位置: 首页 > 综合 > 正文

利用ASP.NET和XSLT实现Silverlight搜索引擎优化(SEO)

2011年01月05日 ⁄ 综合 ⁄ 共 2488字 ⁄ 字号 评论关闭

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>

 

-->

作者:

抱歉!评论已关闭.