Colorful Life2010

XSL输出CDATA中的HTML数据
Weather:有点凉,但不冷,适合过年的天气

 N3C前台用的XML+XSLT,所以在显示页面内容的时候,很多数据(如日志内容)放在XML里的时候,需要加上这样的标签包围。要不然,一则如果HTML标签不完整封闭XML 出错,二则如果内容包含如“&“这样的字符的话,XSL又会报错。

在非FIREFOX浏览器中,直接在上面加上 disable-output-escaping="yes",即用就可以正常显示。必须要加这个哦,要不然后XML自动转义,显示出来的就是HTML代码了,而不是HTML的显示效果了。当然,最好还在输出XML的时候,给这个节点加上信息,如

      <![CDATA[
            <%# Eval("Content") %>
        ]]>

这样就比较保险了。

但是,这些只是非FIREFOX浏览器的处理方法,在号称自己是最好的浏览器的FF中,官方公然声明不支持XSL的这种转义显示,就算是你加了上面说的disable-output-descaping也是没用的。但是,你想想现在用FIREFOX的那么多,不可能让FF来了之后就直接看HTML源代码呀。

这时,就得伟 大的JAVASCRIPT出马了。原理呢,很简单,因为XSL在FF转出来的是HTML源码,只是不进行显示而已,那么就用JS把这些HTML取出来,然后再将这些HTML代码用innerHtml给设置回去就可以了,具体JS怎么实现就不写了,我还是写出来我用的基于JQUERY的方法吧。

var escaping=function(){
$('.ffcdata').each(function(){
$(this).html($(this).text());
});
};
if($.browser.mozilla){
jQuery(document).ready(escaping);
}

先定义一个函数,这个函数就是处理页面当中我加了class="ffcdata"标记的HTML里的内容,取出其中的TEXT再设置成HTML。下面那个就是用JQUERY的浏览器判断方法判断如果是FIREFOX浏览器的话就执行。
PS:$.browser这个方法是先于jQuery的ready()方法执行的。
历史上的今天: [2007/01/07]MS SQL SERVER 2000日志清理方法

[XSL输出CDATA中的HTML数据]的回复

T 于 2009-01-08 10:25:42 发表 | IP:221.201.141.*

...飘过..............  测试... 没看懂...

Sutra 于 2009-01-08 21:57:23 发表 | IP:114.93.116.*

在Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; zh-CN; rv:1.9.0.5) Gecko/2008120121 Firefox/3.0.5下,右侧的如日志分类等跑到下面去了。
 

柠檬园主 于 2009-01-08 22:10:44 发表 | IP:119.109.19.*

 Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 (.NET CLR 3.5.30729)

我的就是这个有问题,看来咱俩的版本号一样了,估计是这个版本的FF3对CSS的解析的BUG了

4#   Shawphy 于 2009-01-20 00:11:34 发表 | IP:58.33.34.*

 要是侧边栏可以放进单独的一个xml里,而主文章是一个xml,就好了。现在每访问一页,都要重新加载一下侧边栏等数据,没有充分体现用xml+xsl的优势~加油~~~

5#   柠檬园主 于 2009-01-20 02:32:30 发表 | IP:119.109.18.*

嗯,谢谢Shawphy的建议.

尤其是分类和链接这样的不常变化的,虽然现在侧边栏都是服务器缓存,但仍需要网络传输.

改成你说的方法就是浏览器缓存了.这一点对于像回复这样的数据就可能会有些延迟的问题.

反正,均衡一下吧,考虑一下怎么改.呵呵.

6#   Shawphy 于 2009-01-24 02:27:03 发表 | IP:58.33.244.*

 刚才看了一下输出的xml,似乎有<p>的段落之前 <![CDATA[ 之后都多了一个 > ,我的错觉么?

另外,上回我没仔细看你的代码~原来套了好深的呀~

另外的另外……非常残念这个fck……太臃肿了……阿门……

另外的另外的另外……新版jQuery 中文文档就采用XML+XSLT了~~从你这偷学了几招,特来感谢~

另外的另外的另外的另外……这验证码为啥0和o很难分清楚啊……

 

7#   柠檬园主 于 2009-01-24 12:08:33 发表 | IP:119.109.29.*

那个>号很是奇怪,程序里肯定是没去输出,并且我看了一下,用CHROME就有,而用IE就 没有.分特了...不是错觉,是浏览器....

浏览器太多太郁闷了,像在FIREFOX下,我这个站就不能加GOOGLE AD或用GOOGLE的CDN以及其它GOOGLE API来进行google.load(),一用就出错.应该是FIREFOX在处理XSL的时候有问题,就像不支持HTML TAG一样.

PS,输出的XML似乎套的不太深吧????还是说XSL套的深?XSL是为了方便TEMPLATE方案..

再PS,FCK这个,个人比较喜欢,毕竟一直用了好几年了.不过,最近也在为此头疼,好多人反映FCK慢了,在想要不要后台用FCK,而前台用别的方案....

再PS PS,太客气了你,我还在等你的CHM版的JQ1.3文档呢,哈哈,不过昨天JQ又发布了1.3.1了,BUG FIX得真快,但还是没FIX那个在FIREFOX下HTML不好用的BUG,似乎没人去BUG TRACKER,昨天想去提交,结果还要注册才能提交,这点就不如FCK,直接发个MAIL就提交了.

再PS PS PS,分不清的主要有两个:0和o,1和i,哈哈,麻烦就麻烦点儿吧,这样机器人更识别不出来了.

8#   Shawphy 于 2009-01-24 18:01:59 发表 | IP:58.33.47.*

验证码(captcha)是用来区分人与计算机的……结果这个验证码确把人当计算机来看待,是不是我有点郁闷呢~

另外,可以直接到

http://groups.google.com/group/jquery-dev?hl=en

去提交bug,或者发邮件给[email protected]

这个mail list即可

9#   柠檬园主 于 2009-02-02 20:54:20 发表 | IP:119.109.27.*

过年好,谢谢你的信息。

看来我要把0和o要舍掉一个了,不行,得全舍掉。。。。 

Post a Comment~