|
使用Java和XSLT生成动态Web页面--建立可容易移植的解决方案的两种方法广告 使用Java和XSLT生成动态Web页面 本文讨论了通过将用户请求参数从 Java 后端程序发送到用于形成 Web 页面的 XSLT 样式表来用 Java 和 XSLT 生成动态 Web 页面的两种方法。样本代码演示 了如何使用 XSLTProcessor 方法和定制方法,以及如何在 XPath 表达式中使用全局参数。 在 XML 之前,开发人员必须用一些服务器方脚本技术(如 CGI、Java 小服务程序或 JSP)来生成动态 Web 页面。 在 XML 以前的模型中,内置的 API 使得可以使用用户请求参数;然后服务器方脚本生成动态内容并将其内容返还回浏览器。对于需要实时访问存储在数据库中数据的应用程序,这仍可能是最佳编程模型。在所有其它情况下,我认为逐渐发展起来的使用 XML 技术的新模型在动态生成 Web 页面的方面代替服务器方脚本。 在这种新模型中,根据存储在数据库中的数据定期创建 XML 文档。 然后,直接将 XML 文档提供给客户机。对于 Web 浏览器客户机,经由XSLT 样式表将 XML 变换为 XHTML。到目前为止,一切顺利。当必须仅使用一种样式表创建基于用户输入的各种 XHTML 页面时,事情会变得十分有趣。这里向您演示如何实现这一技术。 应用体系结构 图 1. 使用小服务程序显示包含 XML 文档的 Web 页面的体系结构
将参数发送到样式表有两种方法:使用 XSLTProcessor 方法,或使用定制方法。这里描述了这两种方法并做简要的比较。 方法 1:使用 XSLTProcessor 方法发送参数 清单 1. XSLTProcessor 方法 XSLTProcessor processor
=XSLTProcessorFactory.getProcessor(); //xmlSource --- XML Document Binary Stream processor.process(xmlSource,
xslSource, 程序创建 XSLTProcessor 类的实例,然后对该实例使用 setStyleSheetParam 方法。如果已经将参数的值存储在变量中,则必须在该变量的前后加引号,如清单 1 中所示。XSLTProcessor 类的处理方法使用 xmlSource 和 xslSource 这两个流来生成动态的 XHTML 页面。 方法 2:使用定制方法发送参数 比较这两种方法 访问 XSLT 样式表内部的全局参数 在 XPath 表达式中使用全局参数 清单 4. 简化成仅包含一个国家或地区的数据的样本 XML 文档 <page> 现在,如果 isocode 作为参数发送到样式表并且您想要获得相关国家或地区的名称,则可以写为: <xsl:value-ofselect="/page/countrylist/country[@isocode=$cntry]/name"> 然而,当如上所示在 XPath 表达式中使用全局参数时,会产生错误的结果。但可以通过使用循环逻辑来避免这一难点,如清单 5 中所示。 清单 5. 循环逻辑以避免 XPath 表达式中的问题 <xsl:for-each
select="/page/countrylist/country"> "./@isocode"/>
</xsl:variable><xsl:iftest="$tempVar=$cntry"> 该代码循环 country 节点的所有子节点。对于每个节点,将 isocode 属性的值存储在一个变量中。然后,代码将该变量与接收到的全局参数进行比较。只要发现匹配,它就抽取 name 属性的值。 参考资料 W3C 站点上的 XSL 转换 (XSLT) 版本 1.0规范描述了 XSLT 的语法和语义。 Apache XML 项目的 Xalan-Java 页面提供本文中描述的 Doug Tidwell 的 XSLT 转换教程演示了如何将几个不同的文档从 XML 转换成 HTML、PDF 和 SVG。 关于作者
如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐 jill.jiang@amteam.org | 021-51096826-112 | 在线联系 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… |
|
|