I have a javascript inside the XSL style sheet. In the javascript, i have a function, getName(node). How do i call this in my xsl? I had used xsl:eval=getname(this) earlier. It worked till IE8. Hasnt worked from IE9 onwards. Can i use xsl:value-of-select? or any other tips to make it work ? Thank you in advance.
<xsl:script language='JavaScript'><![CDATA[
var sSobeysRegion = "Sobeys West";
var sReceiverID = "SOBEYSCANADA:ZZ";
var ATLANTIC = "Sobeys Atlantic";
var WEST = "Sobeys West";
var QUEBEC = "Sobeys Quebec";
var ONTARIO = "Sobeys Ontario";
var option1 = ATLANTIC ;
var option2 = WEST ;
var option3 = QUEBEC ;
var option4 = ONTARIO ;
function getRegion(sVar)
{
if (sVar == sSobeysRegion) {
return true;
}
else {
return false;
}
}
function setReceiverID(sTmp)
{
if (sTmp == "Sobeys Atlantic") {
sReceiverID = "SOBNBTATLTST:ZZ";
option1 = ATLANTIC;
option2 = WEST;
option3 = ONTARIO;
option4 = QUEBEC;
}
else if (sTmp == "Sobeys West") {
sReceiverID = "SOBNBTWSTTST:ZZ";
option2 = ATLANTIC;
option1 = WEST;
option3 = QUEBEC;
option4 = ONTARIO;
}
else if (sTmp == "Sobeys Quebec") {
sReceiverID = "SOBNBTQUETST:ZZ";
option2 = ATLANTIC;
option3 = WEST;
option4 = ONTARIO;
option1 = QUEBEC;
}
else if (sTmp == "Sobeys Ontario") {
sReceiverID = "SOBNBTONTTST:ZZ";
option2 = ATLANTIC;
option3 = WEST;
option1 = ONTARIO;
option4 = QUEBEC;
}
}
function getRegionValue(Node)
{
var sRegion = "TESTID";
var xmldoc = Node.ownerDocument;
var root = xmldoc.documentElement;
sRegion = root.getAttribute("Region");
sSobeysRegion = sRegion;
setReceiverID(sSobeysRegion)
// return sRegion;
return "";
}
var iLineItemCount = 0;
function addLineItemCount()
{
++iLineItemCount;
return iLineItemCount;
}
function getLineItemCount()
{
return iLineItemCount;
}
function getEditNodeName(Node)
{
var sTmp = "";
// var xmldoc = Node.ownerDocument;
// var root = xmldoc.documentElement;
// var attribute = null;
// sTmp = Node.nodeName;
// attribute = xmldoc .createAttribute("EditItemCount");
// Node.setAttributeNode(attribute);
// Node.setAttribute("EditItemCount", getEditItemCount());
//attribute = Node.getAttributeNode();
// sTmp += ", " + Node.getAttribute("EditItemCount");
// sTmp += ", document.form." + Node.nodeName + Node.getAttribute("EditItemCount") + ".value";
// sTmp = "this";
sTmp = "this, " + getIndex(Node);
return sTmp;
}
function getName(Node)
{
var sTmp = "";
sTmp = Node.nodeName;
return sTmp;
}
function getValue(Node)
{
var sTmp = "";
if (Node.childnodes(0)!= null) {
sTmp = Node.childnodes(0).nodeValue;
}
return sTmp;
}
function setValue(Node, sValue)
{
}
function TransformDate(Node)
{
var sTmp = 0;
var sDate = "";
sTmp = Node.childnodes(0).nodeValue;
sDate = sTmp.substring(4,6) + "/" + sTmp.substring(6,8) + "/" + sTmp.substring(0,4);
return sDate;
}
var iLineCount = 0;
function getLineCount(Node)
{
++iLineCount;
return iLineCount;
}
var iEditItemCount = 0;
function getEditItemCount(Node)
{
++iEditItemCount;
return iEditItemCount;
}
function getIndex(node)
{
var iCount = 0;
var previousNode = null;
while(node.parentNode != null){
previousNode = node.previousSibling;
while(previousNode != null){
if ((previousNode.nodeName != "#document") && (previousNode.nodeName != "xml")
&& (previousNode.nodeName != "xml-stylesheet")) {
iCount += countChildren(previousNode);
// sValue += previousNode.nodeName + "%";
++iCount;
}
previousNode = previousNode.previousSibling;
}
node = node.parentNode;
if (node.nodeName != "#document") {
++iCount;
// sValue += node.nodeName + "*"
}
}
return(iCount);
}
function countChildren(node)
{
var iCount = 0;
var iTotal = 0;
var intNode = 0;
iCount = node.childNodes.length;
if (iCount > 0) {
for (intNode = 0; intNode < iCount; intNode++) {
if (node.childNodes(intNode).nodeName != "#text") {
iTotal += countChildren(node.childNodes(intNode));
// sValue += node.childNodes(intNode).nodeName + "&";
++iTotal;
}
}
}
return(iTotal);
}
function showNext()
{
}
]]></xsl:script>
This is the javascript present in the xsl:script block. The call to this function is below.
`enter code here`
<xsl:template match="SAC_SAC_01_248">
<xsl:element name='select'>
<xsl:attribute name='class'>select</xsl:attribute>
<xsl:attribute name='name'><xsl:value-of-select = "getName(this)">/></xsl:attribute>
<xsl:attribute name='defaultvalue'><xsl:value-of-select = "getValue(this)"/></xsl:attribute>
<xsl:attribute name='style'>color: black; font-size: 10px;font-weight: normal;font-family: Verdana, Arial, Helvetica, sans-serif</xsl:attribute>
<xsl:attribute name='onchange'>onNewCodeChange(<xsl:value-of-select = "getEditNodeName(this)"/>, 2)</xsl:attribute>
<xsl:element name='Option'>
<xsl:attribute name='value'></xsl:attribute>
</xsl:element>
<xsl:element name='Option'>
<xsl:attribute name='value'>A</xsl:attribute>
A
</xsl:element>
<xsl:element name='Option'>
<xsl:attribute name='value'>C</xsl:attribute>
C
</xsl:element>
</xsl:element>
</xsl:template>
xsl:scriptis not a standard instruction. So you need to define exactly on what product you want to use it. Now, there might be alternatives like using JavaScript to do what needs to be done in JavaScript, before launching the transform (passing extra info asxsl:paramor enriching the input tree with extra attributes or elements).xsl:evalname (see msdn.microsoft.com/en-us/library/hh180178(v=vs.85).aspx). However, this support ended with IE9 at it was never a standard. For replacing it, see stackoverflow.com/questions/4551931/…. In particular, if you are only using IE, you could usemsxsl:script. See msdn.microsoft.com/en-us/library/ms256042.aspx.getNamefunction could probably be removed simply by doing<xsl:value-of select="name(current())" />.