xsl-list
[Top] [All Lists]

Re: Problem sending node Array to Javascript using .NET xsl/xml parser

2003-10-15 06:48:48
in this context both . and current() are equivalent.. try using current() 
instead of . and see if that fixes it...

Regards,

M.


----- Original Message ----- 
From: "Disalvo, Anthony J." <ANTHONY(_dot_)J(_dot_)DISALVO(_at_)saic(_dot_)com>
To: <XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com>
Sent: Tuesday, October 14, 2003 9:25 AM
Subject: [xsl] Problem sending node Array to Javascript using .NET xsl/xml 
parser


I have the following XML structure and XSLT Files. I have a javascript 
which
retrieves a reference to a node and then formats a number based upon how
large or small the number is.

I have been using Xselerator to test my XSLT against the XML and it has
successfully generated the correct html output I am looking for.

If I try the same transaction using ASP.NET XslTransform the following 
error
message: "warning JS1204: Not all required arguments have been supplied"

It is having a problem with the following line of code: <xsl:value-of
select="local:formatSigfigs(.,'AvgLabQARecovery')"/>

It does not like the period/decimal point being sent in to the javascript 
as
a reference to the node.

Any ideas on how to deal with this issue or alternatives on how tro
reference the node not using the period / decimal point that will pass the
Microsoft parser's requirements?

//////////////////////////////XML
INPUT///////////////////////////////////////////////////////////////////////
/

<Report ReportID="QC-03" ReportTitle="Laboratory Report Sample - Percent
Recovery">
<Group GroupCategory="Sampling Event List" GroupValue="25,35,45,55,65,75">
<AnalyteData LabResultsTypeName="LCS" LabResultsTypeDescription="Result 
from
a lab control sample" Analyte="Americium-241" AnalyticalMethodType="RGAMM"
AvgLabQARecovery="99.000000000000" MinLabQARecovery="99.000000000000"
MaxLabQARecovery="99.000000000000" AnalyteCount="2"/>
<AnalyteData LabResultsTypeName="LCS" LabResultsTypeDescription="Result 
from
a lab control sample" Analyte="Cesium-137" AnalyticalMethodType="RGAMM"
AvgLabQARecovery="105.367005227874" MinLabQARecovery="97.000000000000"
MaxLabQARecovery="107.709999084473" AnalyteCount="531"/>
<GroupList GroupListValue="25" GroupListText="Cotto-Waxo
(DT14)-Verification-Class 2"/>
<GroupList GroupListValue="35" GroupListText="Plant 1 (Small Area #11
North)-Verification-Class 1"/>
</Group>
</Report>

////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////

//////////////////////////////////////////XSL
INPUT//////////////////////////////////////////////////////////////

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
 xmlns:msxsl="urn:schemas-microsoft-com:xslt"
 xmlns:auto-nsl="http://www.w3.org/TR/WD-xsl";
 xmlns:local="urn:galileo-com:msxsl-jscript-utilities" >
<xsl:template match="/">
<xsl:for-each select="Report">
<table width="800px" border="1" cellpadding="0" cellspacing="0" >
<xsl:choose>
<xsl:when test="Group">
<tr><td>
<table border="1" width="100%" cellpadding="0" cellspacing="0">
<tr><td width="50%">Report Code</td><td
width="50%"><xsl:value-of select="@ReportID"/></td></tr>
<tr><td width="50%">Report Name</td><td
width="50%"><xsl:value-of select="@ReportTitle"/></td></tr>
</table>
<xsl:for-each select="Group">
<table>
<xsl:choose>
<xsl:when test="GroupList">
<tr>
<td><xsl:value-of
select="@GroupCategory"/></td>
<td></td>
</tr>
<xsl:for-each select="GroupList">
<tr>
<td></td>
<td><xsl:value-of
select="@GroupListText"/></td>
</tr>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<tr>
<td><xsl:value-of
select="@GroupCategory"/></td>
<td><xsl:value-of
select="@GroupValue"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</table>
<table cellpadding="0" cellspacing="0" class="rptHeadBold"
border="1" width="100%">
<tr>
<td align="right" width="17%">Analyte</td>
<td align="right" width="17%">Analytical
Method Type</td>
<td align="right" width="17%">Average Lab
Value</td>
<td align="right" width="17%">Min Lab
Value</td>
<td align="right" width="16%">Max Lab
Value</td>
<td align="right" width="16%">Analyte
Count</td>
</tr>
</table>
<table border="1" width="100%" cellpadding="0"
cellspacing="0" >
<xsl:for-each select="AnalyteData">
<tr>
<td align="right" width="17%"><xsl:value-of
select="@Analyte"/></td>
<td align="right" width="17%"><xsl:value-of
select="@AnalyticalMethodType"/></td>
<td align="right" width="17%"><xsl:value-of
select="local:formatSigfigs(.,'AvgLabQARecovery')"/></td>
<td align="right" width="17%"><xsl:value-of
select="local:formatSigfigs(.,'MinLabQARecovery')"/></td>
<td align="right" width="16%"><xsl:value-of
select="local:formatSigfigs(.,'MaxLabQARecovery')"/></td>
<td align="right" width="16%"><xsl:value-of
select="@AnalyteCount"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</td></tr>
</xsl:when>
<xsl:otherwise>
<tr>
<td align="center">No data was returned for the selected
parameters.</td>
</tr>
</xsl:otherwise>
</xsl:choose>
</table>
</xsl:for-each>
</xsl:template>
<msxsl:script language="JavaScript" implements-prefix="local">
<![CDATA[
function formatSigfigs (oNodeList,ColumnName)
{
var oNode = oNodeList.item(0);


//var numberVal = oNode.getAttribute('AvgLabQARecovery');
var numberVal = oNode.getAttribute(ColumnName);
if ((numberVal >= 1000000)||(numberVal <= 0.0001))
{
var exponentVal;

if (numberVal >= 1000000)
{
exponentVal = 5;
numberVal = numberVal/1000000
while(numberVal > 10)
{
numberVal = numberVal/10;
exponentVal = exponentVal + 1;
}
numberVal = formatNumber(numberVal,"0.00") + "E+" +
formatNumber(exponentVal,"0");
}
else
{
exponentVal = -4;
numberVal = numberVal* 10000;
while(numberVal < 1)
{
numberVal = numberVal*10;
exponentVal = exponentVal - 1;
}
numberVal = formatNumber(numberVal,"0.00") + "E" +
formatNumber(exponentVal,"0");
}

}

else if (numberVal >= 100000){numberVal =
(formatNumber(numberVal,"#,##0").substr(0,4) + "000");}
else if (numberVal >= 10000){numberVal =
(formatNumber(numberVal,"#,##0").substr(0,4) + "00");}
else if (numberVal >= 1000){numberVal =
(formatNumber(numberVal,"#,##0").substr(0,4) + "0");}
else if (numberVal >= 100){numberVal = formatNumber(numberVal,"#,##0");}
else if (numberVal >= 10){numberVal = formatNumber(numberVal,"#,##0.0");}
else if (numberVal >= 1){numberVal = formatNumber(numberVal,"#,##0.00");}
else if (numberVal >= 0.1){numberVal = 
formatNumber(numberVal,"#,##0.000");}
else if (numberVal >= 0.01){numberVal =
formatNumber(numberVal,"#,##0.0000");}
else if (numberVal >= 0.001){numberVal =
formatNumber(numberVal,"#,##0.00000");}
return numberVal;
}
  var separator = ",";  // use comma as 000's separator
  var decpoint = ".";  // use period as decimal point
  var percent = "%";
  var currency = "$";  // use dollar sign for currency

  function formatNumber(number, format, print) {  // use:
formatNumber(number, "format")
    if (print) document.write("formatNumber(" + number + ", \"" + format +
"\")<br>");

    if (number - 0 != number) return null;  // if number is NaN return 
null
    var useSeparator = format.indexOf(separator) != -1;  // use separators
in number
    var usePercent = format.indexOf(percent) != -1;  // convert output to
percentage
    var useCurrency = format.indexOf(currency) != -1;  // use currency
format
    var isNegative = (number < 0);
    number = Math.abs (number);
    if (usePercent) number *= 100;
    format = strip(format, separator + percent + currency);  // remove key
characters
    number = "" + number;  // convert number input to string

     // split input value into LHS and RHS using decpoint as divider
    var dec = number.indexOf(decpoint) != -1;
    var nleftEnd = (dec) ? number.substring(0, number.indexOf(".")) :
number;
    var nrightEnd = (dec) ? number.substring(number.indexOf(".") + 1) : 
"";

     // split format string into LHS and RHS using decpoint as divider
    dec = format.indexOf(decpoint) != -1;
    var sleftEnd = (dec) ? format.substring(0, format.indexOf(".")) :
format;
    var srightEnd = (dec) ? format.substring(format.indexOf(".") + 1) : 
"";

     // adjust decimal places by cropping or adding zeros to LHS of number
    if (srightEnd.length < nrightEnd.length) {
      var nextChar = nrightEnd.charAt(srightEnd.length) - 0;
      nrightEnd = nrightEnd.substring(0, srightEnd.length);
      if (nextChar >= 5) nrightEnd = "" + ((nrightEnd - 0) + 1);  // round
up

 // patch provided by Patti Marcoux 1999/08/06
      while (srightEnd.length > nrightEnd.length) {
        nrightEnd = "0" + nrightEnd;
      }

      if (srightEnd.length < nrightEnd.length) {
        nrightEnd = nrightEnd.substring(1);
        nleftEnd = (nleftEnd - 0) + 1;
      }
    } else {
      for (var i=nrightEnd.length; srightEnd.length > nrightEnd.length; 
i++)
{
        if (srightEnd.charAt(i) == "0") nrightEnd += "0";  // append zero 
to
RHS of number
        else break;
      }
    }

     // adjust leading zeros
    sleftEnd = strip(sleftEnd, "#");  // remove hashes from LHS of format
    while (sleftEnd.length > nleftEnd.length) {
      nleftEnd = "0" + nleftEnd;  // prepend zero to LHS of number
    }

    if (useSeparator) nleftEnd = separate(nleftEnd, separator);  // add
separator
    var output = nleftEnd + ((nrightEnd != "") ? "." + nrightEnd : ""); 
//
combine parts
    output = ((useCurrency) ? currency : "") + output + ((usePercent) ?
percent : "");
    if (isNegative) {
      // patch suggested by Tom Denn 25/4/2001
      output = (useCurrency) ? "(" + output + ")" : "-" + output;
    }
    return output;
  }

  function strip(input, chars) {  // strip all characters in 'chars' from
input
    var output = "";  // initialise output string
    for (var i=0; i < input.length; i++)
      if (chars.indexOf(input.charAt(i)) == -1)
        output += input.charAt(i);
    return output;
  }

  function separate(input, separator) {  // format input using 'separator'
to mark 000's
    input = "" + input;
    var output = "";  // initialise output string
    for (var i=0; i < input.length; i++) {
      if (i != 0 && (input.length - i) % 3 == 0) output += separator;
      output += input.charAt(i);
    }
    return output;
  }
  ]]>
 </msxsl:script>
</xsl:stylesheet>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>