xsl-list
[Top] [All Lists]

Re: [xsl] Create Table

2010-03-24 00:41:06
Since my primary interest in XSLT is Web browsers, I have no intention
of learning XSLT 2 anytime soon.  XSLT 1 forces one to be clever, I'm
actually quite comfortable giving up traditional data structures and
conditional logic, so I'll stubbornly cling to it.  Stylewise, I look 
to avoid for-each in favor of apply-templates whenever possible.

IOW, no, I don't think a bunch of "or's" is the answer.  ;-)  All I've 
done is change the Xpath expressions, the gist of the solution is the 
same as before, no conditional logic, just some "and's" for node 
selection.

Yeah, each time the goalposts move (due to my misunderstanding), my 
solution gets a bit uglier... but I like it.  Wolfgang's solution is 
prettier, of course.  But, we're both making the same assumption that 
there is always at least one @section='diff' separating the groups of
@section='changes'.

-Eric

<?xml version='1.0' encoding='utf-8'?>
<server-manifest>
    <interface-categories>
        <data section='diff'>if (reportService != null)</data>
        <data section='diff'>return false;</data>
        <data section='diff'>return true;</data>
        <data section='changes' field='version'>\main\spr2010_apr_dev\2</data>
        <data section='changes' field='date'>20100310.102844</data>
        <data section='changes' field='user'>jryan</data>
        <data section='changes' field='cr_number'>602018</data>
        <data section='changes' field='comment'>fix for log 5960</data>
        <data section='diff'>1296a1297,1298</data>
        <data section='diff'></data>
        <data section='diff'>if (reportService != null)</data>
        <data section='diff'>return true;</data>
        <data section='diff'>return false;</data>
        <data section='changes' field='file'>HistoryWages.java</data>
        <data section='changes' field='version'>\main\spr2009_apr_dev\2</data>
        <data section='changes' field='date'>20090310.102844</data>
        <data section='changes' field='cr_number'>602118</data>
        <data section='changes' field='comment'>fix for log 6950</data>
        <data section='diff'>1296a1297,1298</data>
        <data section='diff'></data>
        <data section='diff'>if (reportService != null)</data>
        <data section='diff'>return bar;</data>
        <data section='diff'>return foo;</data>
        <data section='changes' field='file'>Wages.java</data>
        <data section='changes' field='date'>20080310.102844</data>
        <data section='changes' field='user'>ryanj</data>
        <data section='changes' field='cr_number'>602218</data>
        <data section='diff'>1296a1297,1298</data>
        <data section='diff'></data>
    </interface-categories>
</server-manifest>

<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version='1.0'
    xmlns='http://www.w3.org/1999/xhtml'
    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
    <xsl:output omit-xml-declaration='no' method='xml' indent='yes' 
xml:space='default' encoding='utf-8'/>
    <xsl:template match='/'>
        <html xml:lang='en'>
            <head>
                <title>table example</title>
                <style 
type='text/css'>table{table-layout:fixed;width:auto}</style>
            </head>
            <body>
                <table width='0' summary='summary goes here for accessibility'>
                    <caption>caption goes here for accessibility</caption>
                    <thead>
                        <tr>
                            <th scope='col'>File</th>
                            <th scope='col'>Version</th>
                            <th scope='col'>Date</th>
                            <th scope='col'>User</th>
                            <th scope='col'>CR Number</th>
                            <th scope='col'>Comment</th>
                        </tr>
                    </thead>
                    <tfoot><!-- optional -->
                        <tr>
                            <th>File</th>
                            <th>Version</th>
                            <th>Date</th>
                            <th>User</th>
                            <th>CR Number</th>
                            <th>Comment</th>
                        </tr>
                    </tfoot>
                    <tbody><xsl:apply-templates 
select="//data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1]/preceding-sibling::data[1]"/></tbody>
                </table>
            </body>
        </html>
    </xsl:template>
    <xsl:template match='data'>
        <xsl:param name='i' select='position()'/>
        <tr>
            <td scope='row'><xsl:value-of 
select="following-sibling::data[(_at_)field='file' and 
count(preceding-sibling::data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1])=$i][1]"/>&#160;</td>
            <td><xsl:value-of 
select="following-sibling::data[(_at_)field='version' and 
count(preceding-sibling::data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1])=$i][1]"/>&#160;</td>
            <td><xsl:value-of 
select="following-sibling::data[(_at_)field='date' and 
count(preceding-sibling::data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1])=$i][1]"/>&#160;</td>
            <td><xsl:value-of 
select="following-sibling::data[(_at_)field='user' and 
count(preceding-sibling::data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1])=$i][1]"/>&#160;</td>
            <td><xsl:value-of 
select="following-sibling::data[(_at_)field='cr_number' and 
count(preceding-sibling::data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1])=$i][1]"/>&#160;</td>
            <td><xsl:value-of 
select="following-sibling::data[(_at_)field='comment' and 
count(preceding-sibling::data[(_at_)section='diff']/following-sibling::data[(_at_)section='changes'][1])=$i][1]"/>&#160;</td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>