XSL Challenge

James Clark jjc at jclark.com
Sat Jun 5 14:45:29 BST 1999


You have to use the variables feature of the current WD. Replace the
second TR element in your attempted solution by the following:


       <TR>
          <xsl:variable name="cols" expr="Column"/>
          <xsl:for-each select="../../Columns/Column">
             <TD>
                 <xsl:variable name="colname" expr="@name"/>
                 <xsl:value-of select="$cols[@name=$colname]"/>
             </TD>
          </xsl:for-each>
       </TR>


Roger Costello wrote:
> 
> Hi Folks,
> 
> Are you up for a mind-bending XSL problem?  Someone presented
> me with this problem several weeks ago and I have yet to find
> a solution.  It looks simple.  It is deceptively challenging.
> 
> An XML document stores database data as follows:
> 
> <?xml version="1.0"?>
> <DynamicTable>
>         <Columns>
>                 <Column name="col1"/>
>                 <Column name="col2"/>
>         </Columns>
>         <Rows>
>             <Row>
>                 <Column name="col1">A</Column>
>                 <Column name="col3">B</Column>
>                 <Column name="col2">C</Column>
>             </Row>
>             <Row>
>                 <Column name="col2">S</Column>
>                 <Column name="col1">E</Column>
>             </Row>
>             <Row>
>                 <Column name="col5">R</Column>
>                 <Column name="col2">G</Column>
>                 <Column name="col1">Q</Column>
>             </Row>
>         </Rows>
> </DynamicTable>
> 
> Note that the columns that we are interested in are col1 and col2.
> A <Row> element may contain data from columns not of interest.
> But, it will always contain at least data for col1 and col2.
> 
> The problem is to create an XSL stylesheet that generates an
> HTML table with a table header:
> 
>            col1   col2
> 
> and within the table it has the row data.  So the HTML table
> should look like this:
> 
>            col1    col2
>            A       C
>            E       S
>            Q       G
> 
> I have shown an XML document which has just two columns.  However,
> the XSL stylesheet needs to be generic and capable of handling
> XML documents with any number of columns (as listed in the <Columns>
> section).
> /Roger
> 
> P.S.  Below is what I tried, which doesn't work.
> 
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"
>                 result-ns="html">
>     <xsl:template match="DynamicTable">
>             <HTML>
>             <HEAD>
>             <TITLE>Dynamic Table</TITLE>
>             </HEAD>
>             <BODY>
>                 <TABLE BORDER="1" WIDTH="50%">
>                     <TR>
>                         <xsl:for-each select="Columns/Column">
>                             <TH><xsl:value-of select="@name"/></TH>
>                         </xsl:for-each>
>                     </TR>
>                     <xsl:for-each select="Rows/Row">
>                         <TR>
>                             <xsl:for-each select="../../Columns/Column">
>                                 <TD><xsl:value-of
> 
> select="../../Rows/Row/Column[@name='{@name}']"/></TD>
>                             </xsl:for-each>
>                         </TR>
>                     </xsl:for-each>
>                 </TABLE>
>             </BODY>
>             </HTML>
>     </xsl:template>
> </xsl:stylesheet>


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list