整理一下XSLT的优缺点

XSLT的英文标准名称为eXtensible Stylesheet Language Transformation。根据W3C的规范说明书( http://www.w3.org/TR/xslt ),最早设计XSLT的用意是帮助XML文档 (document)转换为其它文档。但是随着发展,XSLT已不仅仅用于将XML转换为HTML或其它文本格式,更全面的定义应该是: XSLT是一种用来转换XML文档结构的语言。
            为了使数据便于人们的阅读理解,我们需要将信息显示出来或者打印出来,例如将数据变成一个HTML文件,一个PDF文件,甚至是一段声音;同样,为了使数据适合不同的应用程序,我们必须有能够将一种数据格式转换为另一种数据格式,比如需求格式可能是一个文本文件,一个SQL语句,一个HTTP信息,一定顺序的数据调用等。而XSLT就是我们用来实现这种转换功能的语言。将XML转换为HTML,是目前XSLT最主要的功能。
1.XSLT stylesheets can automate the conversion of the same input into multiple output formats.
2.XSLT一个很大的优势就是可以在任何地方随时在XML数据全局范围内抓取需要的任何数据,不受XML数据结构影响。

3.将数据和表达形式分离。就象天气预报的信息可以显示在不同的设备上,电视,手机或者其它。这样给你一个XML,一个DTD,就可以开发XSLT,而不用关心后台数据如何实现。比如如果有一天突然觉得要换界面了,那么重新做一个xsl就好了,后台的程序和xml的结构完全不需要修改,如果你用传统的方法,由于数据和显示耦合的太紧密,所有的页面都将重写...
 
4.將XSLT轉化在客戶端進行可以大大減少服務器壓力,服務器只需要將XML數據發送到客戶端,XSLT已經保存在本地,從而减小网络流量.

5.可以很好的避免安全性問題,以XSLT转化得到的页面通过查看源代码得到的只有XML数据。

6.能够很好的适应需求的快速变化,不用修改逻辑代码,不用编译,甚至可以直接在线修改,就可以解决比较一般的需求变化。

 

7.另外,是因为它专门用来处理xml,它处理xml比DOM方便多了,对于目前盛行的Ajax应用来说,尤其有其发挥空间,比较典型的可以参考AJAXSLT
ajaxslt是一个针对Ajax在取得XML资料格式后,利用Javascript动态加入XSL-T(XML Stylesheet Language - Transformation)与及XPath的运用所开发的一套元件。一般上,XMLHttpRequest在传回XML字串后,我们必须花另一个功夫将这些XML数据转换成能够显示的用户界面,这是非常繁琐的工作,而且程序码的重用是一个恶梦。不过,通过ajaxslt,我们可以利用XSLT模版对XML文件进行处理,然后输出一个用户界面,当然我们不必了解ajaxslt是怎样处理XML和XSLT的,只要熟悉XSLT和XPath的原理就可以很轻松地处理XML文件了。详细请看:http://nixeon.blogspot.com/2006/01/google-ajaxslt.html

 

8.一个xslt可以生成N种版面布局,但html就只能通过script来实现.

 

 

 

2.語法學習需要時間,大部分程序員可以對它比較陌生;但是語法非常直觀,只要稍微投入,就可以輕鬆入門.

3.xslt格式检查严谨,这在coding阶段也许稍微麻烦一点,但在应用和维护阶段非常有好处.
 
另外給大家推薦一個學習XML的論壇. http://bbs.xml.org.cn/index.asp
關於目前XML涉及到的一些新應用,比如:MathML,SVG,SMIL,VoiceXML,XSL-FO...可以看看: http://www.simonstl.com/articles/navigateur/index.html
 --------------------------------------------------------------------------------------------------------------------------------
轉載:
        XSL是参考SGML中的DSSSL(用来设置SGML的表现样式)而设计的。最初设计XSL的目的就是采用XML格式提供一种为XML文档设置表现样式的新方法。虽然也可以使用CSS来为XML文档设置表现样式(而且CSS还是非常成熟的一套规范,拥有大量的优点),但是CSS所采用的是与XML不同的一套语法,无法使用相同的XML解析器来进行处理,这为开发带来了额外的负担。后来W3C发现制定XSL规范的工作量实在太大,就将整个工作分成了两个部分:XSLT(T代表Transform)和XSL-FO(FO代表Formatting Objects)。XSLT主要是面向转换类应用,很快(1999年内)就作为正式规范推出了,参见 W3C XSLT 1.0规范;XSL-FO主要是面向精确的表现样式定义(例如生成PDF),在 W3C XSL 1.0规范 中描述。所以,XSL=XSLT+XSL-FO。
        XSLT虽然名字中也有Stylesheet,但是它其实不是为设置文档的表现样式的目的而设计的,用来替代CSS的是XSL-FO。然而XSL-FO目前还没有浏览器能够支持(其复杂性造成了其可能很多年以后才会被应用在浏览器之中,这是“委员会驱动”设计方法的通病),所以我们在这里就不讨论了。XSLT的主要作用是将XML由一种格式转换为另一种格式,例如:由XML的一种词汇表转换为另一种词汇表;或者由XML转换为HTML或者XHTML,便于在浏览器中显示。后面一种应用(XML->HTML/XHTML)是目前XSLT应用最为广泛的领域,被应用在一些J2EE表现层框架中(例如,Cocoon是一个典型的代表。其他的J2EE表现层框架也可以通过集成Jakarta Taglibs来实现类似的功能)。这些框架在服务器端做XSLT转换,将生成的HTML/XHTML发送给浏览器。基于这种技术的框架可以非常方便地支持各种瘦客户端,例如:具有无线上网功能的PDA或WAP手机(这时候是XML->WML,也就是由XML的一种词汇表转换为另一种词汇表,WML本身也是XML的一种词汇表),无非就是另外再写一套XSLT转换规则。有一些需要定期生成静态页面的网站也在服务器端采用XML+XSLT来定期生成静态页面(这类进程一般是以后台方式来运行的)。
        在IE 5.0中就可以支持XSLT了,不过当时采用的不是XSLT的正式规范,而是这个规范的一个草案(namespace为 http://www.w3.org/TR/WD-xsl )。IE 6.0支持XSLT的正式规范(namespace为 http://www.w3.org/1999/XSL/Transform )。Mozilla也在2001年就可以支持XSLT了。既然IE和基于Mozilla的浏览器(Mozilla Suite、Firefox、Netscape、etc.)都可以很好地支持XSLT,这就引起了一种思考,究竟是在服务器端做XSLT转换好还是在浏览器端做XSLT转换好呢?我的考虑是尽管在服务器端做XSLT转换更加灵活,功能更加强大,我却更愿意在浏览器端做转换。因为XSLT转换是非常耗费资源(内存、CPU)的操作,如果在服务器端做大量的转换操作必然会极大地影响服务器的性能(设想有100个并发连接,同时在服务器端做100个XSLT转换的情况)。必须要在服务器端做转换的更好的方案是以后台方式定期生成静态的HTML页面(一些新闻网站就是这样做的);或者在服务器端通过软件实现某种缓存机制,而不必重复做相同的转换。这也符合我们的一贯思路:浏览器其实能做很多事情,而且现在主流PC机型(P4 2G、256M 以上内存)的处理能力已经非常强了,所以在浏览器力所能及的情况下应该将尽量多的工作交给浏览器去做。
        然而,目前除了IE与基于Mozilla的浏览器之外,其他的浏览器(例如Opera和Safari)目前仍然还不支持在浏览器端做XSLT转换,因此如果计划支持这些浏览器,必须要提供在服务器端做XSLT转换的对应功能,使得应用在这些浏览器上也能正常运行。
        XSLT目前已经达到了实用的阶段并且被广泛采用。我们做Ajax开发有的时候也会用到XSLT。Google Maps的那个可爱的弹出式小气球就是使用客户端的XSLT(至少在IE和Firefox上是这样做的)来生成的。在《Ajax实战》(Ajax in Action中文版)第12章:使用XSLT的动态搜索,也通过一个完整的实例演示了客户端XSLT的威力。使用XSLT的好处是可以将很多界面生成的工作自动化,减少错误的发生。当然XSLT也有一定的复杂性,需要花一些时间来学习,带来了额外的学习成本,因此需要在做设计之前做一些权衡。在适当的场合使用XSLT,无疑会成为Ajax开发者的一件利器。
虽然XSLT在IE与基于Mozilla的浏览器中都可以支持XSLT,然而它们的调用语法差别很大,这又为我们带来了头疼的跨浏览器不兼容问题。不必担心,解决之道就是使用一些成熟的跨浏览器库,例如 Sarissa。Google支持的一个开源项目 Google AjaxSLT,代码基于Google的工作,用来执行XSLT转换,以及XPath查询.
 

html/jsp/php时必须按页面顺序写的(除非用script对innerhtml处理可以例外)
xslt完全不需要按顺序,把全站广告都放在一起,全站菜单放在一起,这是充分利用xsl:template的结果.
缺點:
1.兼容性問題: 部分瀏覽器不支持XSLT,不過解決方案可以將解析放在服務器端執行;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XSLT中,确实没有内置的split函数来分割字符串。但是你可以使用递归和substring函数来实现类似的功能。下面是一个示例代码,展示了如何在XSLT中实现一个简单的split函数: ``` <xsl:template name="split"> <xsl:param name="input" /> <xsl:param name="delimiter" select="','" /> <xsl:choose> <xsl:when test="contains($input, $delimiter)"> <xsl:value-of select="substring-before($input, $delimiter)" /> <xsl:text> </xsl:text> <xsl:call-template name="split"> <xsl:with-param name="input" select="substring-after($input, $delimiter)" /> <xsl:with-param name="delimiter" select="$delimiter" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$input" /> <xsl:text> </xsl:text> </xsl:otherwise> </xsl:choose> </xsl:template> ``` 这个模板将接受两个参数:input和delimiter。它会逐个输出input中使用delimiter分隔的部分,并在每个部分后面添加一个换行符。 你可以在需要的地方调用这个模板,传递对应的参数来实现你的需求。比如,你可以在你的XSLT文档的某个模板中这样使用它: ``` <xsl:call-template name="split"> <xsl:with-param name="input" select="'ItemA,ItemB,ItemC'" /> <xsl:with-param name="delimiter" select="','" /> </xsl:call-template> ``` 这样,将会以换行符分隔的形式输出"ItemA"、"ItemB"和"ItemC"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [在xslt中实现split方法对查询字符串进行分隔](https://blog.csdn.net/ddjq1044/article/details/101340306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [利用xsltxml中数据实现splite换行的总结](https://blog.csdn.net/gaotong2055/article/details/84128994)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值