[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Create Table

Subject: Re: Create Table
From: bernie bonn <moochambo@xxxxxxxxx>
Date: Wed, 31 Mar 2010 13:12:41 -0700 (PDT)
Re:  Create Table
Hi all,

I wanted to sort of start over with this one.  I feel I am close, but
the final solution is still evading me.  Anyway just wanted to re-submit my
xml and xsl examples and ask some new questions.  I have to thank Eric and
others for helping a newbie get this far. :)  All the solutions were great,
the problem was that I didn't fully understand the challenges.  My fault! 
Also, I am developing for the browser if that changes things.  

Anyway, I am
trying to format xml from a Software Build System into an html table.  The
goal is to create a table that takes 'general' data for each code change and
place it in a table row.  This data comes from nodes with field attributes of
'file','version','date','user','CR Number', and 'comment'.  I have this
working.  What I need to do next is fill a cell in the next row with all the
nodes with a field attribute of 'diff', this could be two lines or 40. 
Basically, in the new row select all nodes with a diff that come after
@field='comment', until the next time the attribute field does not equal diff
or equals 'file'.  I also, will need to keep track of the attribute lineId
because the data nodes are sorted in a really "unique" way (e.g. the first
node's lineId is 61.  The xsl below gets close to what I want but selects more
@field=diff nodes than I want.  

Also, with the recursive templates , I am
having trouble with the test.  My context node has an attribute of file, but I
want to recursively grab all the nodes for that change where attribute =
diff.  

I apologize for the large xml segment, but I think it will help
clarify the challenges. I have been experimenting a lot so the code may not be
that clean.  

Thanks so much.  I am learning a lot here...

XML:
<interface-categories><categoryname="Source
Changes"category="Source"><datalineId="61"section="diff"field="diff">266c267,
273</data><datalineId="62"section="diff"field="diff">&lt; continue
workerPayComponentLoop;</data><datalineId="63"section="diff"field="diff">---<
/data><datalineId="64"section="diff"field="diff">&gt; continue
workerPayComponentLoop;</data><datalineId="65"section="diff"field="diff">&gt;
} else {</data><datalineId="66"section="diff"field="diff">&gt; if
(clientCategoryCode.equals("blank") &amp;&amp;
"5".equals(row.getString("icpc_calc"))</data><datalineId="67"section="diff"fi
eld="diff">&gt; &amp;&amp; (waLIValues.contains(desc) &amp;&amp;
!hasActiveWaPolicy(row.getLong("icpc_ic_id"))))</data><datalineId="68"section
="diff"field="diff">&gt;
{</data><datalineId="69"section="diff"field="diff">&gt; setMemoInd =
true;</data><datalineId="70"section="diff"field="diff">&gt;
 }</data><datalineId="71"section="diff"field="diff">509a517</data><datalineId
="72"section="diff"field="diff">&gt;
{</data><datalineId="73"section="diff"field="diff">510a519,521</data><datalin
eId="74"section="diff"field="diff">&gt; if
(setMemoInd)</data><datalineId="75"section="diff"field="diff">&gt;
method.setIncludeMemoHours(true);</data><datalineId="76"section="diff"field="
diff">&gt;
}</data><datalineId="77"section="diff"field="diff">777c788,796</data><datalin
eId="78"section="diff"field="diff">&lt; }
</data><datalineId="79"section="diff"field="diff">---</data><datalineId="80"s
ection="diff"field="diff">&gt;
}</data><datalineId="81"section="diff"field="diff">&gt;
</data><datalineId="82"section="diff"field="diff">&gt; private boolean
hasWorkersCompProduct (Client clt) throws
PayrollException</data><datalineId="83"section="diff"field="diff">&gt;
{</data><datalineId="84"section="diff"field="diff">&gt; ClientProduct
reportService =
 ConversionHelper.getClientProductByType(clt.getPrimaryKey(),
ProductType.PAYCHEX_WORKERS__COMPENSATION_REPORT_SERVICE,
clt.getAsOfDate());</data><datalineId="85"section="diff"field="diff">&gt; if
(reportService != null)</data><datalineId="86"section="diff"field="diff">&gt;
return true;</data><datalineId="87"section="diff"field="diff">&gt; return
false;</data><datalineId="88"section="diff"field="diff">&gt;
}</data><datalineId="89"section="Section1"field="URL">[url]\\rnd-spbuild-1\we
b\nightly\spr2010_apr_dev\CA_C-b3h_179_spr2010_apr_dev\index.html[/url]</data
><datalineId="31"section="diff"field="diff">1012c1024</data><datalineId="32"s
ection="diff"field="diff">&lt; setMethod(row.getString("icpc_calc"),
row.getString("ic_401k_calc"),
clientPayComponent);</data><datalineId="33"section="diff"field="diff">---</da
ta><datalineId="34"section="diff"field="diff">&gt;
setMethod(row.getString("icpc_calc"), row.getString("ic_401k_calc"),
clientPayComponent,
 setMemoInd);</data><datalineId="35"section="diff"field="diff">1125a1138,1145
</data><datalineId="36"section="diff"field="diff">&gt;
}</data><datalineId="37"section="diff"field="diff">&gt;
</data><datalineId="38"section="diff"field="diff">&gt; private boolean
hasWorkersCompProduct (Client clt) throws
PayrollException</data><datalineId="39"section="diff"field="diff">&gt;
{</data><datalineId="40"section="diff"field="diff">&gt; ClientProduct
reportService = ConversionHelper.getClientProductByType(clt.getPrimaryKey(),
ProductType.PAYCHEX_WORKERS__COMPENSATION_REPORT_SERVICE,
clt.getAsOfDate());</data><datalineId="41"section="diff"field="diff">&gt; if
(reportService != null)</data><datalineId="42"section="diff"field="diff">&gt;
return true;</data><datalineId="43"section="diff"field="diff">&gt; return
 false;</data><datalineId="44"section="changes"field="file">.\payx\domain\dev
\src\com\paychex\spr\domain\conversion\task\ConvertHistoryWages.java</data><d
atalineId="45"section="changes"field="version">\main\spr2010_apr_dev\2</data>
<datalineId="46"section="changes"field="date">20100310.102844</data><dataline
Id="47"section="changes"field="user">jryan</data><datalineId="48"section="cha
nges"field="cr_number">602018</data><datalineId="49"section="changes"field="c
omment">fix for log
5960</data><datalineId="50"section="diff"field="diff">1296a1297,1298</data><d
atalineId="51"section="diff"field="diff">&gt; } else
{</data><datalineId="52"section="diff"field="diff">&gt;
 chkpc.setWorkerPaycomponentMemoHoursIndicator(true);</data><datalineId="53"s
ection="changes"field="file">.\payx\domain\dev\src\com\paychex\spr\domain\con
version\task\CreateWorkerPayComponents.java</data><datalineId="54"section="ch
anges"field="version">\main\spr2010_apr_dev\1</data><datalineId="55"section="
changes"field="date">20100310.102819</data><datalineId="56"section="changes"f
ield="user">jryan</data><datalineId="57"section="changes"field="cr_number">60
2018</data><datalineId="58"section="changes"field="comment">fix for log
5960</data><datalineId="59"section="diff"field="diff">261a262</data><dataline
Id="60"section="diff"field="diff">&gt; boolean setMemoInd =
false;</data><datalineId="3"section="changes"field="date">20100310.102809</da
ta><datalineId="4"section="changes"field="user">jryan</data><datalineId="5"se
ction="changes"field="cr_number">602018</data><datalineId="6"section="changes
"field="comment">fix for log
 5960</data><datalineId="7"section="diff"field="diff">18a19</data><datalineId
="8"section="diff"field="diff">&gt; import
com.paychex.spr.clientproduct.ClientProduct;</data><datalineId="9"section="di
ff"field="diff">19a21,22</data><datalineId="10"section="diff"field="diff">&gt;
import
com.paychex.spr.clientproduct.config.ProductFinderUtility;</data><datalineId=
"11"section="diff"field="diff">&gt; import
com.paychex.spr.clientproduct.ejb.ClientProductAssembler;</data><datalineId="
12"section="diff"field="diff">720c723</data><datalineId="13"section="diff"fie
ld="diff">&lt; private void setMethod(String code, String calc401k,
ClientPayComp
clientPayComponent)</data><datalineId="14"section="diff"field="diff">---</dat
a><datalineId="15"section="diff"field="diff">&gt; private void
setMethod(String code, String calc401k, ClientPayComp clientPayComponent,
boolean
 setMemoInd)</data><datalineId="16"section="diff"field="diff">731a735,736</da
ta><datalineId="17"section="diff"field="diff">&gt; if
(setMemoInd)</data><datalineId="18"section="diff"field="diff">&gt;
method.setIncludeMemoHours(true);</data><datalineId="19"section="diff"field="
diff">967a973</data><datalineId="20"section="diff"field="diff">&gt; boolean
setMemoInd =
false;</data><datalineId="21"section="diff"field="diff">972c978,984</data><da
talineId="1"section="changes"field="file">.\payx\domain\dev\src\com\paychex\s
pr\domain\conversion\task\ConvertClientPayComponents.java</data><datalineId="
2"section="changes"field="version">\main\spr2010_apr_dev\1</data><datalineId=
"22"section="diff"field="diff">&lt; continue
clientPaycomponentLoop;</data><datalineId="23"section="diff"field="diff">---<
/data><datalineId="24"section="diff"field="diff">&gt; continue
clientPaycomponentLoop;</data><datalineId="25"section="diff"field="diff">&gt;
} else
 {</data><datalineId="26"section="diff"field="diff">&gt; if
(categoryCode.equals("blank") &amp;&amp;
"5".equals(row.getString("icpc_calc"))</data><datalineId="27"section="diff"fi
eld="diff">&gt; &amp;&amp; (waLIValues.contains(desc) &amp;&amp;
!hasActiveWaPolicy(clientKey)))</data><datalineId="28"section="diff"field="di
ff">&gt; {</data><datalineId="29"section="diff"field="diff">&gt; setMemoInd =
true;</data><datalineId="30"section="diff"field="diff">&gt;
}</data></category>


XSL:  Partially working

<?xml version='1.0'
encoding='utf-8'?><xsl:stylesheetversion='1.0'xmlns='http://www.w3.org/1999/x
html'xmlns:xsl='http://www.w3.org/1999/XSL/Transform'><xsl:outputomit-xml-dec
laration='no'method='xml'indent='yes'xml:space='default'encoding='utf-8'/><xs
l:templatematch='/'><htmlxml:lang='en'><head><title>table
example</title><!--<style
type='text/css'>table{table-layout:fixed;width:auto}</style>--></head><body><
tablewidth='0'summary='summary goes here for
accessibility'border="1"><caption>Source
Changes</caption><thead><tr><th>File</th><th>Version</th><th>Date</th><th>Use
r</th><th>CR
Number</th><th>Comment</th></tr></thead><tbody><xsl:apply-templatesselect="//
category[@name='Source
Changes']/data[@field='file']"/></tbody></table></body></html></xsl:template>
<xsl:templatematch='data'><xsl:paramname='i'select='./@lineId'></xsl:param><!
--***can't use following-sibling here because some are not following need to
find based on
 lineId***--><tr><th><xsl:value-ofselect='.'/></th><th><xsl:value-ofselect='/
/data[@lineId = $i+1]'/></th><th><xsl:value-ofselect='//data[@lineId =
$i+2]'/></th><th><xsl:value-ofselect='//data[@lineId =
$i+3]'/></th><th><xsl:value-ofselect='//data[@lineId =
$i+4]'/></th><th><xsl:value-ofselect='//data[@lineId =
$i+5]'/></th></tr><tr><td><xsl:call-templatename="diffs"><xsl:with-paramname=
"lineNumber"select="./@lineId
+6"/><xsl:with-paramname="field"select="@field"/></xsl:call-template></td></t
r></xsl:template><xsl:templatename="diffs"><xsl:paramname="lineNumber"/><xsl:
iftest="($lineNumber!=80)"><!--***This was just to get something to show up, I
need help here****--><xsl:value-ofselect='following::data[@field="diff" and
@lineId=$lineNumber]'/><xsl:call-templatename="diffs"><xsl:with-paramname="li
neNumber"select="$lineNumber +
1"/></xsl:call-template></xsl:if></</xsl:template>xsl:stylesheet>



-----
Original Message ----
From: bernie bonn <moochambo@xxxxxxxxx>
To: Eric J.
Bowman <eric@xxxxxxxxxxxxxxxx>; xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Sent: Tue,
March 30, 2010 3:31:45 PM
Subject: Re:  Create Table

HI Eric,  as always
thanks for your help!

I am getting so close.  What you gave me didn't
completely solve the problem, but it helped me to think what the context is,
and I did some more research to get the table looking like I wanted.  (Not
sure if it is the best way to do it, but I can worry about that later).  

So
I have my table built with all the source changes, now I want to add a row
with the 'diffs' for each change(could be 30 or more nodes).  The challenge is
after i have grabbed  the the File, version, date etc for the first row,  I
need to then somehow grab all the data nodes where @field=diff, until the next
node where @field!=diff, and place it in the next row.  Off topic, I plan on
using JavaScript to hide the diff detail unless use wants to see it.  Seems
like a while loop, but I know those don't exist.  I also am currently
experimenting with named templates, although struggling with how to set
context.  

Sorry this is so muddled, let me know if you need clarifications. 
Thanks again,

Bernie



----- Original Message ----
From: Eric J. Bowman
<eric@xxxxxxxxxxxxxxxx>
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Cc: bernie bonn
<moochambo@xxxxxxxxx>
Sent: Sat, March 27, 2010 3:22:26 AM
Subject: Re: 
Create Table

> 
> So this answer extends the example already given, by adding
the number
> () function.
>

Heh, don't listen to me, I'm still learning
myself... number() isn't 
needed here, as this works just fine:
<th><xsl:value-of select='./@lineId+1'/></th>

What I've just learned, is that
I need to take a closer look at how
XSLT processors handle typing, my answer
assumed number() was needed in
order to perform addition like you were trying,
and was thus totally 
wrong.

Anyway, I played around with it a bit more,
adding this to my <tr>
template:

<xsl:param name='x' select='./@lineId'/>
And changing the <th> two different ways, as follows:

<th><xsl:value-of
select='following-sibling::data[@lineId=$x]/@lineId'/></th>
<th><xsl:value-of
select='following-sibling::data[@lineId=$x+1]/@lineId'/></th>

The first line
results in <th/>, the second line works as expected.
The first line can be
rewritten as select='//data[@lineId=$x]/@lineId' 
and it will work as
expected.  So I suspect your problem is one of not
minding your context node,
i.e. you started with this:

<xsl:param name='x' select='./@lineId'/>

Then,
you have <xsl:value-of select='data[@lineId=$x]'/>, which can't 
work  because
you haven't selected an axis...  So it's hard to know how 
to specifically
help you here -- the 'data[@lineId=$x]' is correct, but 
only if it's preceded
by a proper axis, and followed by '/@lineId' since 
you're after attribute
content, instead of element content.

-Eric

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.