I was scraping internet for one xslt when I was converting drools 2 to jboss rule 4, but couldn't find one,
 
so I rolled up sleeves and created one by myself, put up here in case anyone need it too.
 
welcome comments.
 
Arina.
 
 

<?

xml version="1.0" encoding="UTF-8"?>

<

xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs ="http://www.w3.org/2001/XMLSchema" xmlns:fn= "http://www.w3.org/2005/xpath-functions" xmlns:java= "http://drools.org/semantics/java" >

<xsl:output method="xml" version="1.0" indent= "yes" omit-xml-declaration="yes"/>

<xsl:template match="/" >

<package name="com.sample ">

<global identifier="doc" type="Document" />

<xsl:apply-templates />

</package>

</xsl:template>

<xsl:template name="javaimport" match="java:import">

<import name="{.}" />

</xsl:template>

<xsl:template name="javaFunction" match="java:functions">

<xsl:if test="contains(.,'public')" >

<xsl:call-template name= "separate">

<xsl:with-param name="str" select="substring-after(.,'public ')" />

</xsl:call-template>

</xsl:if>

</xsl:template>

<xsl:template name="separate" >

<xsl:param name="str" />

<xsl:choose>

<xsl:when test="contains($str,'public')" >

<xsl:call-template name= "drlFn">

<xsl:with-param name="fnBody" select="substring-before($str,'public')" />

</xsl:call-template>

<xsl:call-template name= "separate">

<xsl:with-param name="str" select="substring-after($str,'public ')" />

</xsl:call-template>

</xsl:when>

<xsl:otherwise>

<xsl:call-template name= "drlFn">

<xsl:with-param name="fnBody" select="$str" />

</xsl:call-template>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

<xsl:template name="drlFn" >

<xsl:param name="fnBody" />

<function name="{substring-before(substring-after($fnBody,' '),'(')}" return-type="{substring-before($fnBody,' ')}"> <xsl:if test="normalize-space(substring-before(substring-after($fnBody,'(' ),')' ))!=''" >

<xsl:call-template name= "params">

<xsl:with-param name="paramStr" select="normalize-space(substring-before(substring-after($fnBody,'(' ),')' ))" />

</xsl:call-template>

</xsl:if>

<body>

<xsl:call-template name= "bdy">

<xsl:with-param name="bdyStr" select="substring-after($fnBody,'{' )" />

</xsl:call-template>

</body>

</function>

</xsl:template>

<xsl:template name="bdy" >

<xsl:param name="bdyStr" />

<xsl:value-of select="substring-before($bdyStr,'}')" />

<xsl:if test="contains(substring-after($bdyStr,'}'),'}')" >

}

<xsl:call-template name= "bdy">

<xsl:with-param name="bdyStr" select="substring-after($bdyStr,'}')" />

</xsl:call-template>

</xsl:if>

</xsl:template>

<xsl:template name="params" >

<xsl:param name="paramStr" />

<xsl:choose>

<xsl:when test="contains($paramStr,',')" >

<xsl:call-template name= "buildIdentifier">

<xsl:with-param name="tpy" select="substring-before($paramStr,' ')" />

<xsl:with-param name="idt" select="substring-after(substring-before($paramStr,','),' ')" />

</xsl:call-template>

<xsl:call-template name= "params">

<xsl:with-param name="paramStr" select="normalize-space(substring-after($paramStr,','))"/>

</xsl:call-template>

</xsl:when>

<xsl:otherwise>

<xsl:call-template name= "buildIdentifier">

<xsl:with-param name="tpy" select="substring-before($paramStr,' ')" />

<xsl:with-param name="idt" select="substring-after($paramStr,' ')" />

</xsl:call-template>

</xsl:otherwise>

</xsl:choose>

</xsl:template>

<xsl:template name="buildIdentifier" >

<xsl:param name="tpy" />

<xsl:param name="idt" />

<parameter identifier="{$idt}" type="{$tpy}" />

</xsl:template>

<xsl:template name="rules" match="rule" >

<rule name="{@name}" >

<xsl:if test="java:condition" >

<lhs>

<and-constraint-connective>

<xsl:for-each select="java:condition" >

<eval><xsl:value-of select="normalize-space(.)" disable-output-escaping="no" /></eval>

</xsl:for-each>

</and-constraint-connective>

</lhs>

</xsl:if>

<xsl:for-each select="java:consequence" >

<rhs>

<xsl:value-of select="." />

</rhs>

</xsl:for-each>

</rule>

</xsl:template>

</

xsl:stylesheet>