使用Java扩展XSL

 

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://"看上去好像是一种新的因特网协议。呵呵。代码如下:

  <!--StartFragment--><?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> 
 
  http://www.wam.umd.edu/~zhangx/xml/html/xmlprog/xalan/javaext.html 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值