xslt带来的新选择

最近我在做一个项目,项目计划采取XML+XSLT解决数据和显示模板的分离问题,这样不同的用户可以选择不同的页面显示模板。

兼顾到netscape浏览器,不直接输出xml,而是使用Jakarta的XSL taglib,这样通过这个taglib,将xml和xslt转换成html输出到浏览器端。

原来觉得这个方案在技术先进性方面,至少五年内是先进的。

但是在具体实施时,发现XML对存储html语法的文本有一定的限制,首先它要求必须是well-formed html,也就是符合XHTML语法的html,如有<br>必须要有</br>,否则XML分析器会报错。
这个问题可以使用Jtidy语法校正器来解决,Jtidy类似Tidy,在soourceforge.net上有下载,很好用,可以自动校正html中不规范的语法。

校正器解决后,就是XSLT对包含html语法的XML元素显示问题,这个可以通过xsl:copy-of 和xsl:template来解决,如:
<xsl:template match="html">
<xsl:copy-of select="*|text()"/>
</xsl:template>
<xsl:template match="book">
<tr>
<td>
<xsl:value-of select="title"/>
</td>
<td>
<xsl:apply-templates select="description"/>
</td>
</tr>
</xsl:template>


就在即将认为大功告成时,又出现致命问题:
项目中,这个带html语法的文本是由用户从form表单中输入,由于我采用了Castor技术,实现了O/R Map功能,但是Castor在存储html语法的文本时,自动将"<"符号转换成 <符号。
这样,上面准备的解决方案无用武之地了。

那就寻找XSLT如何将xml中元素包含 <的能直接变成html语法<输出,而不是文本形式的< 这个问题的解决似乎比较复杂,从国外deja新闻组的方案来看,书写很复杂。

至此,准备更换项目计划,显示不再使用xslt,而是使用Jsp解决,也就是实用XML+Jsp代替XML+XSLT

这样做有几个好处:
1.避免对Xslt不熟悉带来项目的技术风险,因为Xslt还在完善中的一个新技术,其实用性有待于考察和完善以及优化,就如一个简单html语法处理,变得很复杂,这不是普及性语言所具备的特征。

2.由于Jsp实际是html,这样可以让网页设计者直接通过dreamnwaver等设计工具方便设计出网页,不必想实用Xslt方案还要对html进行Xslt转换。节约工作量和成本。

3.Jsp技术也是一个新的技术,在技术先进性方面不会很落后于XSLT,只是兼容性方面差点,但是我们项目中间件基本是Java系统的,所以这个问题不是问题,更主要的是,使用Jsp,我们就可以使用J2EE的MVC架构来完成这个项目。
做一个模板Servlet控制程序,用来提供对不同用户适时更换不同的显示模板,这个配置是通过XML完成。这可以参考petstore的Servelt及其配置文件,这样可操作性大大增强,技术风险降低。

在实际项目中,我们经常处于选择新技术(风险大)还是采用成熟技术的艰难抉择中。虽然我们不停的学习新技术,但却承担不起项目失败的压力,所以在现实中,我也会像您一样选择自己熟悉的技术。

是啊,但是经常使用熟悉的技术,又容易陷入保守被淘汰的地步,所以具体实施时,我是 “大胆的想,小心的做”。
也就是规划大胆的用新技术规划,实施设计时发现无法克服或者要花费很多时间去克服问题时,再使用熟悉技术。

我现在刚毕业,在公司做一个MVC架构的程序,主要是用一个核心servlet处理javabean和分发jsp页面,我学过一阵EJB感觉如果用
EJB写的话代码量会少很多,我想知道究竟是否应该在这家公司继续
jsp/servlet/javabean的开发,还是去学j2EE的多层体系架构呢
望斑竹之点一二

当然先做好基础 将Javabean/jsp项目做好

其实我有过类似的想法,不过我认为那是一个水到渠成的事,研究好了,将javabean换成ejb,也就是EJB层,不就是多层结构了么

另外,斑竹能不能给一下xml+xslt的一些实用信息啊,我作完这个想研究一下,不过现在只是找资料

为什么不试试Cocoon XSP

Coocon好像用不到Java了 我感觉都是XML
另外coocon和JBoss3整合方面有点问题
你有经验吗?能谈谈?

等JSP2.0正式发布,相信现在许多有关jsp的种种不便会得到解决。

我最近也用XML+XSLT+JSP做了一个项目.有些体会.

我觉得关键是这些项目的数据源都是以XML形式发布给web service. 所以在生成Html Page时, JSP必须解析这些XML形式的数据. 我觉得一个Page有相对固定的部分,也有根据数据不同而变化的部分. 用XML+ XSLT 做相对变化的部分比较适合, 这部分的内容一般来说,比较简单,不花捎, 重复的内容,仅仅数据变化. 美工的修饰不多见. 我没有使用extension tag lib,而是写了一个javabean专门用Xalan做XML Transform, 输入XML 数据和相应的XSLT, 得到Html Page中的一部分或是全部的内容, 再由JSP输出这些到web browser. 我没有用Castor(也不知是干什么用的), 没有碰到班主所描述的问题, 曾碰到脱字符&的问题, 但都可以解决.

其实这种实现相当于将IE支持的XML数据岛的方式放在了web server端来实现. 我想比起XML+JSP的方案要少写Code.

在处理form submit时, 我在javabean中将所有的request parameter变成
<Parameters><Parameter name="" value=""/>...</Parameters>的形式,在由一个反向的XSLT将其转换成application server接受的XML数据格式.送回到数据源服务器.实现了数据的修改.关键是这个javabean是通用的.

如果每个xslt都是完整的html page, JSP可以退化为Servlet.

对XSLT做美工也不是不可能的, 组织得好的话, 一个这样的page可能只需要挂一个css的链接就可以了.

XML 与 XSLT的完美结合,可以使得JSP 的Taglib相形见绌。Apache推出Cocoon2.0以来,对XSLT的应用有上了一个台阶。

为什么说Cocoon中用不到Java乐? Cocoon需要用Java来定义其Lib,用Java来生成业务控制,用Java生成Pre-defined的xml label.

Cocoon与JBoss3地结合也很好,确实在安装时有一些问题。Developersbus.com已经安装并运行JBoss3.0和Cocoon2.0三个月以上了。

有关XML/XSLT的文章可以参见
http://www.developersbus.com/forum/showthread.php?s=cf4f7359bb57601b5c3ba5889802aa95&threadid=176

呵呵,刚想推荐站长到developerbus,你自己已经来了

请教:
在XSLT中怎么能用javascript。

其实用xslt主要的用途是做摸板有些功能与velocity差不多,一般与xml联合使用对与xml 的话转换要注意xml 内的字符,然后通过transform转换成html

但是用xslt也是有缺点的,首先就是美工根本不懂xsl的语法,所以从页面设计到实际的XSL还是需要程序原来自己翻译,劳动量大。而且直接用xsl转换成Html代码的话,对xml文件的内容纪录格式要求限制大,比如log4j记录时间使用long数据,显示谁也不会用这个的,写xls是可以但是太麻烦了