从 XSLT 样式表调用 JavaScript (转载 作者Nicholas Chase )
http://www-900.ibm.com/developerWorks/cn/xml/tips/x-tipxsltjs/index.shtml
样本文档
<?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. 最终输出
参考资料
分享到:
相关推荐
从XSLT样式表调用JavaScript的知识点解析 在探讨如何从XSLT样式表调用JavaScript时,我们首先需要理解XSLT和JavaScript的基本概念及其在XML文档处理中的作用。XSLT(Extensible Stylesheet Language ...
**XSL基础教程:从XSLT样式表调用JavaScript** 在深入了解如何从XSLT样式表调用JavaScript之前,让我们首先理解XSLT的基本概念。XSLT(Extensible Stylesheet Language Transformations)是一种XML方言,用于转换...
在XSLT(可扩展样式表语言转换)中调用Java是一种常见的技术,它允许开发者利用XSLT处理XML文档时,与Java代码进行交互,从而实现更复杂的逻辑和功能。这种结合使得XSLT不仅可以进行简单的数据转换,还能执行更强大...
这个过程包括加载XML文档,加载XSLT样式表,然后执行转换,最后将结果输出为字符串或写入文件。这种方法在服务器端处理XML数据时非常有用,例如,可以根据用户请求动态生成定制化的HTML响应,或者在服务器端预处理...
### XSLT 调用 Java 的类方法详解 #### 一、背景介绍 XSLT(Extensible Stylesheet Language Transformations)是一种用于XML文档转换的语言。它允许开发者将一个XML文档转换为另一种结构的XML文档或其他格式的文档...
本文将深入探讨XML的基础知识,包括DTD(Document Type Definition)约束模式、Schema约束模式、XSLT样式表、SAX解析和DOM解析,以及不太常见的JOM解析。 1. **XML基础**: - XML设计的目标是传输和存储数据,而非...
【使用XSLT转换Web服务WSDL文档的技巧和诀窍】 在Web服务领域,WSDL(Web Services Description Language)文档扮演着至关重要的角色,它用XML格式详细描述了服务接口和实例的位置。WSDL的XML表示使得各种开发工具...
同时,他们可能还编写了JavaScript代码和XSLT样式表,用于在用户界面上实时更新和展示数据。 总结起来,"Zero Server Controls"技术结合了XML、AJAX和XSLT的优势,为ASP.NET和C#应用提供了高效的、用户友好的数据...
XSL(eXtensible Stylesheet Language)是一种样式表语言,用于转换XML文档的格式。XSL分为两个主要部分:XSLT(XSL Transformations)和XPath(XML Path Language)。XSLT是用于转换XML文档到其他XML文档或非XML...
XSLT使用模板匹配和模式规则来定义如何转换源XML文档。通过这种方式,XML数据可以根据需求转换成适合浏览器显示的HTML,或者用于其他目的的格式。 HTML(HyperText Markup Language)是网页内容的标准表示语言,它...
XSLT(可扩展样式表转换语言)则是用于将XML(可扩展标记语言)文档转换为其他格式,如HTML、PDF或者其他的XML文档。在这个"用javascript以xslt显示xml_demo"的示例中,我们将探讨如何利用JavaScript来处理XML数据,...
在XSLT(可扩展样式表语言转换)中,命名空间是处理XML文档时不可或缺的一部分,特别是当XML文档包含自定义或特定领域的元素时。命名空间允许开发者区分具有相同名称但来自不同源的元素,避免命名冲突。在XSLT样式表...
`Transformer` 用于执行转换操作,而 `Source` 代表输入和输出的数据源,可以是XML文档或者XSLT样式表。 以下是使用Java_XSLT转换XML的基本步骤: 1. 加载XML源文件: 使用 `javax.xml.transform.stream....
在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,而XSLT(XSL Transformations)则是用于转换XML文档的样式表语言。本示例涉及的是使用C#编程语言来执行XSLT转换的过程,这对于...
- 调用`TransformerFactory.newTransformer(Source xsltSource)`方法,传入XSLT样式表的`Source`对象,生成`javax.xml.transform.Transformer`对象。 4. 设置转换参数(可选): - 如果XSLT样式表中包含参数,...
在软件开发中,JavaScript和XSLT(可扩展样式表语言转换)是一种常见的组合,用于将XML数据转换为HTML,以便在网页上呈现。本文将详细解释如何利用这两种技术实现XML到HTML的解析。 首先,XML(可扩展标记语言)是...
在网页中,我们可以通过JavaScript或AJAX(异步JavaScript和XML)技术直接从服务器获取XML数据并在页面上动态展示。例如,使用JavaScript的`XMLHttpRequest`对象,可以发送HTTP请求获取XML文件,然后解析XML并更新...
XSLT的工作原理基于样式表,这些样式表定义了如何将XML文档的结构和内容转换为所需的目标格式。在本案例中,我们有*.xml文件,这通常包含了原始数据和结构。通过应用相应的XSLT样式表,这些XML文件可以被渲染成可视...
- 通过将Java与XSLT相结合,可以在XSLT样式表中调用Java代码片段或方法,实现更为复杂的逻辑处理。 - 这种结合不仅增强了XSLT的能力,还使得开发者能够充分利用Java的强大功能来处理XML数据。 3. **实例说明**: ...