使用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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章