Subject: Re: [xsl] Dynamically building a HTML table from variable row data From: Jörg Heinicke <joerg.heinicke@xxxxxx> Date: Sun, 16 Dec 2001 13:20:04 +0100 |
I don't know whether it's the best solution but it's a generic one: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="columns" match="ROW/*" use="name()"/> <xsl:template match="BLOCK"> <table border="1"> <tr> <xsl:for-each select="ROW/*[count(.|key('columns',name())[1]) = 1]"> <xsl:sort select="name()"/> <td><xsl:value-of select="name()"/></td> </xsl:for-each> </tr> <xsl:apply-templates/> </table> </xsl:template> <xsl:template match="ROW"> <xsl:variable name="id" select="generate-id()"/> <tr> <xsl:for-each select="../ROW/*[count(.|key('columns',name())[1]) = 1]"> <xsl:sort select="name()"/> <td><xsl:value-of select="../../ROW[generate-id() = $id]/*[name() = name(current())]"/></td> </xsl:for-each> </tr> </xsl:template> </xsl:stylesheet> ----- Original Message ----- From: "Michael Leditschke" <ammd@xxxxxxxxxxxxxx> To: <XSL-List@xxxxxxxxxxxxxxxxxxxxxx> Cc: ""Robert Koberg"" <rob@xxxxxxxxxx> Sent: Sunday, December 16, 2001 11:16 AM Subject: Re: [xsl] Dynamically building a HTML table from variable row data > Thanks for the reply Robert. The problem > I have is that there are a large number of > similarly formatted blocks but the sub-element > names vary in each one. Thus hardcoding each > one is something I'm trying to avoid if possible. > > Regards > Michael > > > how about: > > <xsl:template match="BLOCK"> > > > <table border="10"> > > <xsl:apply-templates select="row"/> > > > </table> > > </xsl:template> > > <xsl:template match="ROW"> > > <tr> > <td><xsl:value-of select="A"/></td> > <td><xsl:value-of select="B"/></td> > <td><xsl:value-of select="C"/></td> > <td><xsl:value-of select="D"/></td> > <td><xsl:value-of select="E"/></td> > </tr> > > </xsl:template> > > > > - ----- Original Message ----- > From: "Michael Leditschke" <ammd@xxxxxxxxxxxxxx> > To: <XSL-List@xxxxxxxxxxxxxxxxxxxxxx> > Sent: Saturday, December 15, 2001 8:25 AM > Subject: [xsl] Dynamically building a HTML table from variable row data > > > > I am attempting to populate an HTML table > > where the column names are generated by the > > set of element names on each row. Not all > > elements occur on all rows. > > > > My problem is thus to dynamically work out > > the total set of columns (using the element > > names) and dynamically position each piece > > of data in the correct column. > > > > For example, assume XML looks like > > > > <BLOCK> > > <ROW> > > <A>1</A> > > <B>2</B> > > </ROW> > > <ROW> > > <A>9</A> > > <B>3</B> > > <C>4</C> > > </ROW> > > <ROW> > > <A>5</A> > > <D>6</D> > > <E>7</E> > > </ROW> > > <BLOCK> > > > > I'd like to end up with a table something like > > > > A B C D E > > 1 2 > > 9 3 4 > > 5 6 7 > > > > > > Thus far I have code something like > > > > <xsl:template match="BLOCK"> > > <xsl:variable name="ColumnNames" > > select="ROW/*[not(local-name()=local-name(preceding::ROW/*)))]"/> > > <table border="10"> > > <tr> > > <xsl:for-each select="$ColumnNames"> > > <th> > > <xsl:value-of select="local-name()"/> > > </th> > > </xsl:for-each> > > </tr> > > </table> > > </xsl:template> > > > > I know its wrong because the local-name function is going > > to process the first node only. So it handles the <A> > > element ok but not any of the others. > > > > I'm trying to follow the > > examples I've seen of grouping but most seem to be based > > on element/attribute content rather than element names. > > > > Various wild and whacky schemes have come to mind but > > before I looked for a zebra, I thought I'd check if anyone > > knew of a horse. > > > > Any pointers much appreciated. > > > > Regards > > Michael XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Dynamically building a HT, Michael Leditschke | Thread | [xsl] Line Breaking for Text, Christopher R. Gardn |
Re: [xsl] Dynamically building a HT, Michael Leditschke | Date | [xsl] Re: Line Breaking for Text, Dimitre Novatchev |
Month |