Click to See Complete Forum and Search --> : please help with this loop


kariba
05-01-2003, 12:01 AM
Hi there,

I have a problem. In my xsl, I have this variable:
<xsl:variable name="recordCountDifference" select="50 - count(/Schema1/Claim) mod 50" />

and then I need to do this loop, and output some tags:

<xsl:for-each select="$recordCountDifference">
<br/>
</xsl:for-each>

Please help me out.

Thanks a lot,

Mike

khalidali63
05-01-2003, 12:10 AM
you did not mention whats wrong and what error you are getting,where the code is breaking etc

kariba
05-01-2003, 12:19 AM
well, because i don't know.

when i view the xsl in IE it works fine, but when I parse it with xml, it gives me error.

The expression passed to this method should result in a NodeSet.

this is my complete stylesheet:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="urn:my-scripts"
xmlns:url="uri:find-url.org"
>
<xsl:output method="html"/>
<xsl:param name="Employee"></xsl:param>
<xsl:variable name="recordCountDifference" select="50 - count(/Schema1/C) mod 50" />

<xsl:template match="/">
<body>
<link rel="stylesheet" href="Styles/Print.css" type="text/css"/>
<script for='window' event='onload()'>
javascript:self.focus();
javascript:window.print();
</script>

<xsl:for-each select="/Schema1/C[position() mod 50 = 1]">
<xsl:choose>
<xsl:when test="position() > 1">
<br/><br/>
<table width="94%" align="center" cellspacing="0" cellpadding="0">
<tr>
<td align="right" class="ClientSideDefault">Page: <xsl:number value="position()"/>
</td>
</tr>
</table>
<br style="page-break-before:always;"/>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="position() >= 0">

<table width="750" align="center" cellspacing="0" cellpadding="0">
<tr>
<td width="26%">
<span class="ClientSide_R_Header">Enter Name: </span>
</td>
<td width="20%" align="left">
<u><span class="ClientSideDefault"><xsl:value-of select="$Employee"/></span></u>
</td>
<td align="right">
</td>
</tr>
</table>
<br/><br/>
</xsl:when>
</xsl:choose>
<table cellspacing="0" Align="center" border="0" id="_ctl1_MyList" style="border-width:0px;width:94%;border-collapse:collapse;">
<xsl:choose>
<xsl:when test="position() >= 0">
<tr>
<td class="DataHeader">Cant</td>
</tr>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select=". | following-sibling::C[position() &lt; 50]"/>
</table>

</xsl:for-each>
<xsl:for-each select="$recordCountDifference">

</xsl:for-each>

<br/><br/>
<table width="94%" align="center" cellspacing="0" cellpadding="0">
<tr>

<td align="right" class="ClientSideDefault">Page: <xsl:number value="position()"/>
</td>
</tr>
</table>
</body>
</xsl:template>
<xsl:template match="Schema1/C">
<tr>
<td class="DataContent"><xsl:value-of select="@Employee"/></td>
</tr>
</xsl:template>

</xsl:stylesheet>


thanks for your help.

Mike

khalidali63
05-01-2003, 12:22 AM
well post some of your xml ..might as well..lol
I'll take a look

khalidali63
05-01-2003, 12:28 AM
first things first,I think you have some spelling mistakes in your code

<xslutput method="html"/>
<xslaram name="Employee"></xslaram>
should be

<xsl:output method="html"/>
<xsl:param name="Employee"></xsl:param>

kariba
05-01-2003, 12:32 AM
I don't need to show you the xml, everything in my stylesheet works, if I take this out:
<xsl:for-each select="$recordCountDifference">

</xsl:for-each>

Syntax in xsl shows correct, xml is correct, I don't know. I didn't find any examples of this kind of loop, maybe it's not possible to do it like this.

Mike

kariba
05-01-2003, 12:37 AM
BTW. I was in Calgary 3 days ago, when the big storm came. Quite impressive, hey? Have you found anything that could cause my problems?

khalidali63
05-01-2003, 12:37 AM
suite your self my friend...
As I spotted 2 mistakes in first glance in your xsl code....who knows what else is wrong..

good luck..believe me you'd need that

kariba
05-01-2003, 12:44 AM
Oh no, I didn't want to sound like that. English is my second language, and I am tired too. Try to understand, please.


I will attatch the xsl file and xml file shortly.

Thanks and I hope you're not mad.

Mike

khalidali63
05-01-2003, 12:47 AM
Mad ..never

:D always...

if you rather,email me..see for me to run your files and see whats going I need files..some time errors are obvious but sometimes in XSL case they are not as obvious because xsl works in recursion...so have to see how it runs and what it produces,.. at least for me thats the case

kariba
05-01-2003, 12:54 AM
Uff, good. Sometimes people who don't speak english perfectly, they can be interpreted wrong, you know.

Anyway, I am attatching the two files, I just took some data out of it, I don't think it should metter. And I duplicated records in xml, so you can test the breakdown in xsl.

I hope you have time to look at it.

Thank in advance!!!

Mike

No, I have to send it to your email...

kariba
05-01-2003, 12:57 AM
Ok,. I post it here, just notice the smiles, the replace ':P'

xsl:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="urn:my-scripts"
xmlns:url="uri:find-url.org"
>
<xsl:output method="html"/>
<xsl:param name="Employee"/>
<xsl:variable name="recordCountDifference" select="50 - count(/Schema1/C) mod 50" />

<xsl:template match="/">
<body>
<link rel="stylesheet" href="Styles/Print.css" type="text/css"/>
<script for='window' event='onload()'>
java script:self.focus();
java script:window.print();
</script>

<xsl:for-each select="/Schema1/C[position() mod 50 = 1]">
<xsl:choose>
<xsl:when test="position() > 1">
<br/><br/>
<table width="94%" align="center" cellspacing="0" cellpadding="0">
<tr>
<td align="right" class="ClientSideDefault">Page: <xsl:number value="position()"/>
</td>
</tr>
</table>
<br style="page-break-before:always;"/>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="position() >= 0">

<table width="750" align="center" cellspacing="0" cellpadding="0">
<tr>
<td width="26%">
<span class="ClientSide_R_Header">Enter Name: </span>
</td>
<td width="20%" align="left">
<u><span class="ClientSideDefault"><xsl:value-of select="$Employee"/></span></u>
</td>
<td align="right">
</td>
</tr>
</table>
<br/><br/>
</xsl:when>
</xsl:choose>
<table cellspacing="0" Align="center" border="0" id="_ctl1_MyList" style="border-width:0px;width:94%;border-collapse:collapse;">
<xsl:choose>
<xsl:when test="position() >= 0">
<tr>
<td class="DataHeader">Cant</td>
</tr>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select=". | following-sibling::C[position() &lt; 50]"/>
</table>

</xsl:for-each>
<xsl:for-each select="$recordCountDifference">

</xsl:for-each>

<br/><br/>
<table width="94%" align="center" cellspacing="0" cellpadding="0">
<tr>

<td align="right" class="ClientSideDefault">Page: <xsl:number value="position()"/>
</td>
</tr>
</table>
</body>
</xsl:template>
<xsl:template match="Schema1/C">
<tr>
<td class="DataContent"><xsl:value-of select="@Employee"/></td>
</tr>
</xsl:template>






xml:
<?xml version="1.0" encoding="utf-16"?>
<Schema1>

<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>
<C Number="95-0227" Employee="Bush"></C>
<C Number="96-3349" Employee="paul"></C>
<C Number="96-0068" Employee="Asdf"></C>



</Schema1>

khalidali63
05-01-2003, 10:05 AM
Here is the error
this line in your code is returning a none node value

<xsl:variable name="recordCountDifference" select="50 - count(/Schema1/C) mod 50" />

and at this location

<xsl:for-each select="$recordCountDifference">

</xsl:for-each>

you are trying to run it as a node,which its not.You have to carefully re-think your logic and determine what is it you wanted to do at this point.and with the value,by the way the variable
$recordCountDifference returns value = 10
..I hope it helped..

kariba
05-01-2003, 01:21 PM
Hello Khalidali63,

I don't really know how to correct that. Here is what i am trying to do.

It's a report, and I have certain amount of records displayed on each page. So I am finding out the difference on the last page, so it's 10 from our example, and so I want to but 10 lines on the last page, so the footer apears on the same positioni at the bottom of the last page. You know what I mean?

So the variable returns 10, and I need to do equivalent of

for(int i=0;i<=10;i++){
response.write("<br/>");
}

What should I do so it works?

I want to thank you for your help.

Mike

khalidali63
05-01-2003, 01:53 PM
Something like this may be?

<xsl:choose>
<xsl:when test="$recordCountDifference=10">
<xsl:value-of select="$recordCountDifference"/>
<xsl:text>&lt;br/&gt;</xsl:text>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>

kariba
05-01-2003, 01:58 PM
Well, but the difference variable is different every time, depending on number of records returned by SQL in XML... I wonder why my loop doesn't work, because the variable is assigned, and returns a integer.

Any ideas?

Thanks a lot,

Mike

sheila
05-06-2003, 01:56 PM
How about using CSS instead?

<div id="content">
... records 1 to 10 ...
</div>
<div id="footer">
... footer ...
</div>

and

div#content {
height: 400px;
}

I've used this technique successfully myself.

kariba
05-06-2003, 02:14 PM
Hello Sheila,

I actually thought of that, but when I was already trying to do that loop, I already figured it out, with some help, but I wonder if this would be better.

Is it compatible with other browsers than IE?

Thansks a lot

Mike