从 XSLT 样式表调用 JavaScript (转载 作者Nicholas Chase )
2004-09-29 17:32
429 查看
从 XSLT 样式表调用 JavaScript (转载 作者Nicholas Chase ) http://www-900.ibm.com/developerWorks/cn/xml/tips/x-tipxsltjs/index.shtml 样本文档
创建组件
使用扩展元素或函数的第一步是定义要执行的代码。这涉及为代码定义新的名称空间及容器:
基本样式表
表面上,这是一个添加了两个新名称空间的典型样式表。第一个名称空间的前缀是
组件本身指定从
在这个例子中,我们从一个函数开始,该函数获取一个参数并将它与 1 到 100 间的随机数进行比较,返回一个表示结果的字符串。
扩展函数
在 XSLT 样式表中,扩展函数实际扩展 XPath,因此,您可以像使用内置函数(如
调用函数
本示例将当前节点(
图 1. 初步结果
使用元素
扩展元素比函数要复杂一点。我们不希望扩展元素简单地返回一个值(虽然它们可以这样做),而希望它们在样式表处理过程中的特定“时刻”执行某个特定的操作。也不希望获得一个随机的参数列表(因为扩展函数也可以),扩展元素背后的代码含有两个良好定义的参数。
使用处理器上下文
扩展元素最强大的方面可能是通过 XSL 处理器上下文参数访问源文档本身的能力。
处理器上下文
图 2. 最终输出
参考资料
请参考 W3C 的 XSLT 建议书。
下载 Apache 的 Xalan-Java 2。
下载 js.jar 文件。
在 developerWorks XML 专区上找到更多 XML 参考资料。
IBM WebSphere Studio Application Developer 是一个易于使用的集成开发环境,用于构建、测试并部署 Java Server Pages、servlet 和与 XML 相关的应用程序及网站。
<?xml version="1.0"?> <entries gameID="DWO"> <entry> <player>John</player> <guess>3</guess> <guess>9</guess> <guess>222</guess> </entry> <entry> <player>Mary</player> <guess>88</guess> <guess>76</guess> <guess>5</guess> </entry> </entries> |
使用扩展元素或函数的第一步是定义要执行的代码。这涉及为代码定义新的名称空间及容器:
基本样式表
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:lxslt="http://xml.apache.org/xslt" xmlns:result="http://www.example.com/results" extension-element-prefixes="result" version="1.0"> <lxslt:component prefix="result" elements="rules" functions="getResult"> <lxslt:script lang="javascript"> function getResult (thisGuess) { var thisResult = parseInt(Math.random()*100); if (thisResult == parseInt(thisGuess)) { return "Correct!"; } else { return "Wrong! The actual answer was "+thisResult+ ", not "+thisGuess+"."; } } </lxslt:script> </lxslt:component> <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> |
lxslt,告诉处理器哪个元素定义了新功能。第二个名称空间的前缀是
result,表明对新功能的一次调用。最后,
extension-element-prefixes属性让处理器知道哪个元素作为正常流的一部分不该被转换。(如同我们将看到的一样,它们仍然会返回一个值作为输出。)
组件本身指定从
result名称空间前缀调用其内部的所有代码。它也让处理器知道哪些函数将从扩展元素调用,以及哪些函数将从扩展函数调用。脚本元素描述函数本身。
在这个例子中,我们从一个函数开始,该函数获取一个参数并将它与 1 到 100 间的随机数进行比较,返回一个表示结果的字符串。
扩展函数
在 XSLT 样式表中,扩展函数实际扩展 XPath,因此,您可以像使用内置函数(如
translate()或
round())一样使用它们。
调用函数
... <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="entry"> Guesser: <xsl:value-of select="player"/> <xsl:apply-templates select="guess"/> </xsl:template> <xsl:template match="guess"> Guess: <xsl:value-of select="."/> Actual: <xsl:value-of select="result:getResult(string(.))"/> </xsl:template> </xsl:stylesheet> |
guess)的字符串值传递给
getResult()函数。名称空间让处理器知道触发结果组件中的函数。
图 1. 初步结果
使用元素
扩展元素比函数要复杂一点。我们不希望扩展元素简单地返回一个值(虽然它们可以这样做),而希望它们在样式表处理过程中的特定“时刻”执行某个特定的操作。也不希望获得一个随机的参数列表(因为扩展函数也可以),扩展元素背后的代码含有两个良好定义的参数。
rules元素触发
rules()函数的处理。该函数将
rules元素本身(
elem)作为其参数之一,允许您检索它拥有的任何定制属性的值。
使用处理器上下文
扩展元素最强大的方面可能是通过 XSL 处理器上下文参数访问源文档本身的能力。
处理器上下文
... <lxslt:component prefix="result" elements="rules" functions="getResult"> <lxslt:script lang="javascript"> ... function rules(ctx, elem) { ctxNode = ctx.getContextNode(); gameID = ctxNode.getFirstChild().getAttribute("gameID"); return "Contest "+gameID+" is based on "+ elem.getAttribute("guessType")+" guesses."; } </lxslt:script> </lxslt:component> ... |
rules函数的第一个参数是
org.apache.xalan.extensions.XSLProcessorContext对象形式的处理器上下文。这允许您检索代表上下文节点、整个源树、样式表以及当前执行转换的转换程序的对象。访问上下文节点是最常见的。一旦由
getContextNode()方法返回,这就是一个可以使用典型 DOM 操作的典型 XML 节点。
图 2. 最终输出
参考资料
请参考 W3C 的 XSLT 建议书。
下载 Apache 的 Xalan-Java 2。
下载 js.jar 文件。
在 developerWorks XML 专区上找到更多 XML 参考资料。
IBM WebSphere Studio Application Developer 是一个易于使用的集成开发环境,用于构建、测试并部署 Java Server Pages、servlet 和与 XML 相关的应用程序及网站。
关于作者 Nicholas Chase 曾参与为包括 Lucent Technologies、Sun Microsystems、Oracle 和 Tampa Bay Buccaneers 在内的多家公司的网站开发。Nick 曾是一名高中物理教师、低级放射性废物设施管理员、在线科幻小说杂志编辑、多媒体工程师和 Oracle 讲师。最近,他成为佛罗里达州克利尔沃特市 Site Dynamics Interactive Communications 的首席技术官。他写了三本有关 Web 开发的书,包括 Java and XML From Scratch(Que)和即将出版的 Primer Plus XML Programming(Sams)。他乐于倾听读者的意见,可以通过 nicholas@nicholaschase.com 和他联系。 |
相关文章推荐
- 从 XSLT 样式表调用 JavaScript (转载 作者Nicholas Chase )
- 从 XSLT 样式表调用 JavaScript
- 技巧:从 XSLT 样式表调用 JavaScript
- 技巧:从 XSLT 样式表调用 JavaScript
- C#后台调用前台javascript的五种方法 (转载)
- 实例讲解用Javascript调用ASP实现过程 (转载)
- javascript轻松实现调用xslt解析xml
- 调用样式表(转载)
- C#后台调用前台javascript的五种方法(转载)
- 【转载】在使用了母版页的内容页后,如何在javascript中调用服务器控件值
- javascript与java的相互调用,纯java的javascript引擎rhino(转载)
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
- javascript 调用 样式表 样式名称
- NET应用程序中异步调用Web Service的几种方法 作者:veryhappy(wx.net),http://blog.csdn.net/veryhappy,转载请注明
- Javascript轻松实现调用xslt解析xml
- JavaScript调用java方法——dwr步骤(有的地方是转载地)
- 转载:net中前台javascript与后台c#函数相互调用问题
- 【转载】JS技巧:Flex与JavaScript的交互:调用JavaScipt或者被JavaScript调用
- 转载:JavaScript 调用后台方法和函数的方法
- 转载 OS js oc相互调用(JavaScriptCore) ---js调用iOS ---js里面直接调用方法