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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述