[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Problem sending node Array to Javascript using .NET xs
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|