以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XSL/XSLT/XSL-FO/CSS 』 (http://bbs.xml.org.cn/list.asp?boardid=8) ---- 小谈XSL继承(争做版主大放血) (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=50381) |
-- 作者:hexun831012 -- 发布时间:7/23/2007 12:40:00 PM -- 小谈XSL继承(争做版主大放血) XSL支持import和include,这使XSL实现继承成为可能,import和include从功能的角度上看区别不大,但从继承的角度上看有着本质的区别。 在说明XSL继承之前,首先要说明XSL模板的优先级问题,稍微了解XSL的人都知道,XSL的模板是自下而上进行解析的,也就是说文档下方的模板具有较高的优先级,如果文档中的模板相互交叉,那么下方的模板将覆盖上方的模板: <xsl:template match="*"> <b> <xsl:value-of select="." /> </b> </xsl:template> <xsl:template match="node"> <xsl:value-of select="." /> </xsl:template> 这个例子最能说明问题,node节点将被下方的模板拦截,而其他节点将交给上方的模板解析,这就说明了模板的顺序对文档来说非常重要,而import和include最大的区别就在于顺序。 import是顶级元素,它必须放在任何模板之前,这是一个良好的特性,import导入文档的模板将放在当前文档的最上方,他们的优先级相对于当前文档较低,也就是说如果模板相互交叉,那么当前文档的模板将覆盖导入文档的模板,这就是实现了重写!!!这种方式最类似于JAVA,他在默认情况下是可重写的: base.xsl <xsl:template match="text()"/> <xsl:value-of select="." /> </xsl:template> use.xsl <xsl:import href="base.xsl" /> <xsl:template match="text()"/> <b> <xsl:value-of select="." /> </b> </xsl:template> use.xsl的text()模板覆盖了base.xsl中的模板,也就是重写,而include和import不同,它可以放在文档的任何位置,如果放在文档的最下部,那就意味着导入文档的模板的优先级高于当前文档的模板,也就是封装!!!这种方式最类似于.NET,默认情况下不可重写: base.xsl <xsl:template match="text()"/> <xsl:value-of select="." /> </xsl:template> use.xsl <xsl:template match="text()"/> <b> <xsl:value-of select="." /> </b> </xsl:template> <xsl:include href="base.xsl" /> use.xsl的text()模板无法覆盖了base.xsl中的模板,也就是封装,如果想实现部分重写,有两种方式,第一,是手动分配模板的优先级,当然这种方式比较繁琐,还有一种方法就是把include放在文档中部,把不需要重写的放在上面,把需要重写的放在下面,当然这种情况比较少。 我所推荐的是使用import,从逻辑上说,可重写的模式对XSL来说比较合理,对于开发人员来说,这种模式既继承了基类的模板,又不用关心基类的细节,如果文档多次继承,那么文档之间有着良好的层次结构,这就为XSL的模块化,层次化提供了可能
|
-- 作者:hexun831012 -- 发布时间:7/23/2007 12:44:00 PM -- 申请精华,争做版主 |
-- 作者:gogy -- 发布时间:7/25/2007 2:36:00 PM -- 才看明白你这篇文章的意思。我的个人观点就是,这篇文章除了“import是顶级元素,它必须放在任何模板之前”这句话外,通篇的理解都是有问题的。 >>>>>>>>> XSL的模板是自下而上进行解析的,也就是说文档下方的模板具有较高的优先级,如果文档中的模板相互交叉,那么下方的模板将覆盖上方的模板 <<<<<<<<<<<< 这句话问题最大,XSLT模板的优先级是由priority属性决定的,可不是由上下顺序决定的。如果没有显式指定该属性,则有一套计算规则存在。 >>>>>>>>> <<<<< 所以,import和include等等,跟JAVA的继承等,没有任何关系和相似性。 另外,欢迎讨论, |
-- 作者:hexun831012 -- 发布时间:7/25/2007 3:09:00 PM -- 楼上的说话要负责任,连XSL的解析顺序都不知道,还自称专业,真是自视甚高,好好看看W3C的文档和XSL解析原理,你把代码反来试试看! 我的确不是XSL程序员,技术实现不是我的工作重心,但就技术论技术我也不比有些人差。
|
-- 作者:gogy -- 发布时间:7/25/2007 3:32:00 PM -- 生气了不是?我可没有攻击你的意思,可是你却搞人身攻击,这不好吧? 》》》》》》 我只是说出自己的观点。你不认同我的观点就算了,大不了,不讨论了嘛。 |
-- 作者:hexun831012 -- 发布时间:7/25/2007 3:57:00 PM -- 抱歉,抱歉 |
-- 作者:gogy -- 发布时间:7/26/2007 10:44:00 AM -- 呵呵,其实,我的意思不是“专业”和“业余”,我是想说“专职”来着。 admin老大,发过好几条回帖奖励给我。这篇回帖又有。是系统自动发的,还是admin仔细看过呢? |
-- 作者:admin -- 发布时间:7/27/2007 1:15:00 AM --
嗯。因为你积极参与交流,发表自己的看法。所以就奖励了。因为一天站上贴子很多,无法一一细看了 :-) |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
109.375ms |