XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
James DelaneySubject: XSLT: Ordered List (based on result, not node position)?
Author: James Delaney
Date: 30 Jun 2009 02:23 PM
All,

I am a new comer to the XML/XSLT scene. I am attempting to receive a total count, or list of total matches that fulfill my if statements. I have attempted to use everything from xsl:number, xsl:count, xsl:value count/sum, the whole works. Right now, I am using a list <ol></li> but it’s giving me a bullet point and not a sequential number. Any help would be great!

My output looks like this:

CountTest
# Student ID ProgamType Gender Credits
• 343434 Transfer Male 16
• 323232 Transfer Male 11
• 32322 Transfer Male 18
• 6464 Transfer Male 13


My desired output SHOULD look like this, but the first column (1,2,3,4) are appearing as bullets such as the output above:
CountTest
# Student ID ProgamType Gender Credits
1 646111 Transfer Male 16
2 6463343 Transfer Male 11
3 323234 Transfer Male 18
4 1045353 Transfer Male 13


This is the XSLT I am applying:


<?xml version='1.0'?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>CountTest</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>#</th>
<th>Student ID</th>
<th>ProgamType</th>
<th>Gender</th>
<th>Credits</th>
</tr>
<xsl:for-each select="Census/Student">

<xsl:if test="
(Gender='Male') and
(@AdmitTerm!='Fall Semester 2008') and
(@ProgramType='Transfer') and
(TotCredits/@Load&gt;11) and
(TotCredits/@UG&lt;30)
">

<tr>
<ol start="1">
<td><li></li></td>
<td><xsl:value-of select="@Id"/></td>
<td><xsl:value-of select="@ProgramType"/></td>
<td><xsl:value-of select="Gender"/></td>
<td><xsl:value-of select="TotCredits/@UG"/></td>
</ol>
</tr>
</xsl:if>
</xsl:for-each>

</table>

</body>
</html>
</xsl:template>
</xsl:stylesheet>




This is one student entry of my student census XML file:

<Student Id="6463343" ProgramType="Transfer" AdmitTerm="N/A">
<Gender>Male</Gender>
<Ethnicity>Black (Non-Hispanic Origin)</Ethnicity>
<BirthDate>31572</BirthDate>
<Citizenship>N/A</Citizenship>
<Degree>Bachelor of Science</Degree>
<Major>Nursing 2 + 2 Program</Major>
<DegreeTWO>N/A</DegreeTWO>
<MajorTWO>N/A</MajorTWO>
<Advisor>Canton</Advisor>
<FinHSGPA>N/A</FinHSGPA>
<TotCredits UG="11" Grad="0" Load="13" TransferCredits="N/A"/>
<PermAddress State="CA">
<City>Oakland</City>
</PermAddress>
<SAT1 type="N/A">
<Score>N/A</Score>
</SAT1>
<SAT2 type="N/A">
<Score>N/A</Score>
</SAT2>
<Classification>trad undergrad</Classification>

Postnext
James DelaneySubject: XSLT: Ordered List (based on result, not node position)?
Author: James Delaney
Date: 30 Jun 2009 06:14 PM
Update:

Been checking on if this is more of a format issue so I tried some xsl:fo, such as <fo:list-item>, but it's relying on <xsl:number> to generate the numerical list number. This is giving me the location of the match within the root xml file, rather than the number of the item on the result hierarchy.

Any help would be greatly appreciative.

Currently, as I can't get around this issue, I'm also trying to give me a count of all matches as well. No luck there too ;)

Postnext
Alberto MassariSubject: XSLT: Ordered List (based on result, not node position)?
Author: Alberto Massari
Date: 07 Jul 2009 04:46 AM
Hi James,
a better solution would be to iterate over the set of nodes using the position as counter, like in this fragment:

<xsl:for-each select="Census/Student[(Gender='Male') and
(@AdmitTerm!='Fall Semester 2008') and
(@ProgramType='Transfer') and
(TotCredits/@Load&gt;11) and
(TotCredits/@UG&lt;30)]">

<tr>
<td><xsl:value-of select="position()"/></td>
<td><xsl:value-of select="@Id"/></td>
<td><xsl:value-of select="@ProgramType"/></td>
<td><xsl:value-of select="Gender"/></td>
<td><xsl:value-of select="TotCredits/@UG"/></td>
</tr>
</xsl:for-each>


Hope this helps,
Alberto

Posttop
James DelaneySubject: XSLT: Ordered List (based on result, not node position)?
Author: James Delaney
Date: 07 Jul 2009 02:09 PM
Originally Posted: 07 Jul 2009 01:04 PM
You are right, and that was much better (because it works!). I spent a day going over Xpath and knew that my paths were wonky with what I was trying to get at. Thank you for the clarification.


How would I get it to also give me the "total matches" of 4?
Using:

<xsl:for-each select="Census/Student[(Gender='Male') and
(@AdmitTerm!='Fall Semester 2008') and
(@ProgramType='Transfer') and
(TotCredits/@Load&gt;11) and
(TotCredits/@UG&lt;30)]">


<xsl:value-of select="last()"/>
</xsl:for-each>

Gives me "4444"

I would like it to give me "4"
---


Edit: Dumb question, I found the solution: Used for-each-group and count(). Thanks again for your help.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.