[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

Subject: Problem sending node Array to Javascript using .NET xsl/xml parser
From: "Disalvo, Anthony J." <ANTHONY.J.DISALVO@xxxxxxxx>
Date: Tue, 14 Oct 2003 09:25:50 -0700
javascript formatnumber
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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.