“似水柔情”惯了,冷不丁来点“学术”的东西还真有点别扭。不过时不时学点新东西对我来说也算是一种娱乐了。
HTML+CSS是把样式定义从内容结构中分离了出去,而xml+xslt则是彻底把结构、样式和内容分开来了。XML存储内容,XSLT定义结构和解释在浏览器中显示的样式。这样做对于我这种发布静态页面而又经常想改改显示样式的人来数实在是太帅了,所以我就斗胆冒着死猪不怕开水烫的精神,凭着仅有的一点点知识开始学习xml+xslt去了。
经过一段时间的学习我琢磨的问题大体有这么几个:
-
XML+XSLT的SEO效果如何?
研究的结论是没有结论。因为我太不了解SEO了,搜索了一圈发现有的人说对搜索引擎来说xml更友好,有的说还是html更友好……算了,我只是打算做记录而已不需要对搜索引擎示好,甚至收不收录我都不在乎,所以没研究出来也就不研究了吧。
-
XSLT的缓存问题。
XML+XSLT的好处主要是把数据和样式彻底分离。成千上万的XML文件都只调用一个XSLT文件来解释表现样式。这样做当然是为了让访问者下载的数据最小化从而缩短页面加载时间。但是我不知道,浏览器访问页面时是不是把XSLT文件缓存下来呢。如果不缓存,那么实际上会比访问HTML+CSS页面下载更多数据。
-
内容格式化表现。
主要就是牵扯到解释
<![CDATA[ ]]>标签内的内容为HTML。对于IE、Opera、Safari/Chrome都好说,把disable-output-escaping属性设置成“yes”就可以了。但是firefox却不支持这个属性,所以需要特殊处理。在网上搜索到一种用JS来实现的:
<script language="JavaScript">1: var escaping=function(){2: if(!document.getElementById){ return false;}3: var interim;4: var temp = document.getElementsByTagName("span");5: var tempLen = temp.length;6: var pattern = new RegExp("(^|\\s)tohtml(\\s|$)");7: for (i = 0; i < tempLen; i++) {8: if ( pattern.test(temp[i].className) ) {9: interim = temp[i].textContent;10: if(interim == undefined || (interim.indexOf("&") == -1 && interim.indexOf("<") == -1)){/*_*/}11: else{temp[i].innerHTML = interim;}12: }13: }http://www.dimlau.com14: temp=null;15: };16: window.load = escaping();</script>
试了一下果然管用,话说,原来Firefox也不好伺候啊。
如果能确保内容完全符合xHTML标准,其实不必使用<![CDATA[ ]]>标签来包裹内容。这样输出的时候可以更简单地表现为html样式,这招是我在看XSLT元素手册的时候自己猜的,试了一下果然有效,而且各浏览器都支持,我相当滴有成就感:
<xsl:copy-of select="node()"/>
不过这样做就要求XML里的内容必须完全符合规范,比如贴图代码<img src=”” />的斜杠我就经常漏掉,万一漏掉,页面就无法打开了。
大概就是这样子了,其实这篇文章我早在上周二就已经写好了,之所以一直没有发布是因为我自己一直没有做出个演示页面来。一直瞎忙活着拖啊拖啊,今天才捡了个比较简单的页面做出来。给个演示:http://www.dimlau.com/ing/
恩,凑合着看看吧,很多地方不完善。而且原来我的ING动态是使用SSI服务器端引用到我的站点首页的,现在变成了xml数据,如果还想引用就要用到JS了。我讨厌(因为不会)JS。
欢迎反馈一下各浏览器的效果。另外,我blog的留言订阅功能以前是不能用的,昨天刚刚换了个插件,希望热心人帮我测试一下可不可以用。谢谢。
本站不欢迎全文转载,如需转载请阅读本站版权声明。http://kaix.in/cgi-bin/mt-tb.cgi/916. Tips:在自己blog里发表针对本文的评论文章时复制上述地址到引用通告栏,你的文章链接就会显示在本页引用列表里。
dimlau.com
wayne
2008-12-09,05:01
firefox 3.0.4 ok...
“回复之...”顺便跟踪一下评论