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>