使用Xalan进行XSLT程序设计--使用Java扩展XSL

本文介绍了如何使用Xalan库通过Java扩展XSLT。这种方法无需额外类库支持,使得扩展更为方便。文章详细讲解了创建Java类以定义XSLT中可调用的公共方法,并给出了一个名为A的示例类,包含out和displaySex两个方法。同时,文章展示了如何修改XSL文件,将javascript替换为javaclass并设置src属性引用Java类,以实现XSLT的Java扩展功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xalan支持使用Java扩展XSLT。而且使用Java扩展XSLT不需要其他类库支持,因此使用Java扩展XSLT是一个很方便的选择。 下面我们就来详细讨论使用Java扩展xsl的方法。另外从使用javascript扩展我们也看到,javascript扩展很难应用于多个xsl文件,而用java进行扩展就可以非常容易地实现。

在使用java进行xsl扩展地时候,我们需要写一个java类。在这个类里面定义一些public地方法,这些方法等同与javascript中地函数。例如下面地例子,我们定义了一个叫做A的类,这个类中有两个public的方法,一个叫做out,这个用来实现out扩展element,另一个方法叫做displaySex,这个方法用来实现扩展方法displaySex。下面是代码。

package a;
import org.apache.xalan.extensions.XSLProcessorContext;
import org.apache.xalan.templates.ElemExtensionCall;
import org.apache.xalan.templates.ElemTemplateElement;
public class A{
public String out( XSLProcessorContext xslProcContext , ElemExtensionCall elmExtCall){
org.apache.xalan.transformer.TransformerImpl oTrsfImpl =
xslProcContext.getTransformer();
org.w3c.dom.NodeList oList = elmExtCall.getChildNodes();
try{
for( int i = 0 ; i < oList.getLength() ; i ++ ){
((ElemTemplateElement)oList.item(i)).execute(oTrsfImpl);
}
}catch(Exception e){
e.printStackTrace();
}
return ",吃了吗?";
}
public String displaySex( String strSex){
if( strSex.equals("m") ) return "先生";
else if( strSex.equals("f") ) return "女士";
else return strSex;
}
}

相应的,我们要对xsl文件进行一些调整,调整后的结果可见下面的代码。我们仅仅修改了script标签中的内容,把javascript变成了javaclass然后再加上一个src的属性,这个属性指向了A类,由于A类是在a包中的,我们还要加上a.,另外还要有一个前缀“xalan://"看上去好像是一种新的因特网协议。呵呵。代码如下:

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:lxslt="http://xml.apache.org/xslt"
xmlns:my-ext="ext1"
extension-element-prefixes="my-ext">
<xsl:output encoding="GB2312"/>
<lxslt:component prefix="my-ext" elements="out" functions="displaySex">
<lxslt:script lang="javaclass" src="xalan://a.A">
</lxslt:script>
</lxslt:component>
<xsl:template match="person">
<results><my-ext:out><xsl:value-of select="."/><xsl:value-of select="my-ext:displaySex(@sex)"/>你好</my-ext:out></results>
</xsl:template>
</xsl:stylesheet>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值