Function calling thro XSL
Find below the XML file , XSL file and the ASP Client transformation code. While transforming i'm getting error. It was working fine with MSXML 3.0 and the functions in <xsl:script> are called from within the xsl like the following
<xsl:eval>somefunction()</xsl:eval>. Since my requirement is to use MSXML 4.0 i'm unable to use <xsl:eval> to call the functions in xsl:script. I have made all the required changes and tried to call a function. It says that the function didn't return data or function returns a data of datatype which xsl doesn't understand.
So pls help me to fix the following...
Check Out the XML file below:
<BusLayerResponse>
<GuideTaskFields>
<GuideTaskField>
<Name>Name1</Name>
<DefaultValue>DefVal1</DefaultValue>
<DefaultDisplay>DefDisp1</DefaultDisplay>
<GuideTaskFieldValues>
<GuideTaskFieldValue>
<Token>Tok1</Token>
<FieldValue>FldVal1</FieldValue>
</GuideTaskFieldValue>
<GuideTaskFieldValue>
<Token>Tok2</Token>
<FieldValue>FldVal2</FieldValue>
</GuideTaskFieldValue>
</GuideTaskFieldValues>
</GuideTaskField>
<GuideTaskField>
<Name>Name2</Name>
<DefaultValue>DefVal2</DefaultValue>
<DefaultDisplay>DefDisp2</DefaultDisplay>
<GuideTaskFieldValues>
<GuideTaskFieldValue>
<Token>Tok3</Token>
<FieldValue>FldVal3</FieldValue>
</GuideTaskFieldValue>
<GuideTaskFieldValue>
<Token>Tok4</Token>
<FieldValue>FldVal4</FieldValue>
</GuideTaskFieldValue>
</GuideTaskFieldValues>
</GuideTaskField>
</GuideTaskFields>
</BusLayerResponse>
Check Out the code in XSL file below:
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns="http://www.w3.org/TR/xhtml1/strict"
xmlns:ms = "testnamespace">
<msxsl:script language="javascript" implements-prefix="ms">
<![CDATA[
function Get_Upper(e)
{
if (e != null)
{
var f = new String(e.text);
return f.toUpperCase();
}
else
{
return "null";
}
}
]]>
</msxsl:script>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates select="//BusLayerResponse" />
</body>
</html>
</xsl:template>
<xsl:template match="BusLayerResponse">
<table border="1">
<tr>
<th>Name</th>
<th>DefaultValue</th>
<th>DefaultDisplay</th>
<th>FieldValue</th>
</tr>
<xsl:for-each select="GuideTaskFields/GuideTaskField">
<tr>
<td><xsl:value-of select="ms:Get_Upper(Name)" /></td>
<td><xsl:value-of select="DefaultValue" /></td>
<td><xsl:value-of select="DefaultDisplay" /></td>
<td>
<select>
<xsl:apply-templates select="GuideTaskFieldValues/GuideTaskFieldValue" />
</select>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="GuideTaskFieldValue">
<option>
<xsl:attribute name="value"><xsl:value-of select="Token" /></xsl:attribute>
<xsl:value-of select="FieldValue" />
</option>
</xsl:template>
</xsl:stylesheet>
Check Out the ASP Client Code for Transformation below:
<%@ language="vbscript"%>
<%
dim oxml , oxsl
dim bLoaded
bLoaded = false
set oxml = server.createobject("MSXML2.DOMDocument.4.0")
oxml.async = false
bLoaded = oxml.load(server.mappath("finalxml.xml"))
if bLoaded then
Response.write "XML loaded"
else
Response.write "XML not loaded"
Response.End
end if
Response.write "<br>"
bLoaded = false
set oxsl = server.createobject("MSXML2.DOMDocument.4.0")
oxsl.async = false
bLoaded = oxsl.load(server.mappath("finalxsl.xsl"))
if bLoaded then
Response.write "XSL loaded"
else
Response.write "XSL not loaded"
Response.End
end if
Response.write "<br>"
Response.Write "HTML Output after transformation"
Response.Write oxml.transformNode(oxsl)
%>

