Subject: [xsl] Re: Making sure table rows are filled? From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Fri, 18 Oct 2002 11:46:07 -0700 (PDT) |
--- Vic Gar wrote: > Hello all, > With flat-ish xml (below), I need to > 1) select the elements from a predetermined position (e.g, elems > d1-d9) > <xsl:variable name="table_nodes" select="/a/b/c/*[position() > < > 10]"/> > 2) take those that have text node children > ...and normalize-space{.} > 3) make a table with rows of two name/value pairs (e.g., > <tr><td>#9</td><td>foo</td><td>#10</td><td>bar</td></tr> ) > for-each select="$table_nodes[position() mod 2 = 1] > <tr> > <xsl:apply-templates select=". | ... > 4) if there are an odd number of elements, only the last row of the > table > can be missing a <td> - all the preceding rows should have the > requisite 2 > name/value pairs. > > > I tried: > <xsl:apply-templates select=". | $table_nodes[position() > $here > and > > position() < $here+2]" mode="td"/> > The nodes that made it into $table_nodes, in doc order, are > d1 & d4-9. > but for some reason it created: > d1 (d1 value} d4 (d4 value} > d5 (d5 value} > d6 (d6 value} d7 (d7 value) > d7 (d7 value} d9 (d9 value} > > My understanding of what's going on here is a long way from where it > should > be. I get why d7 was selected twice, but as for the rest (why no d8, > why > single <td> at d5, how to do this properly) can anyone explain it to > me? > > xml: > <a> > <b> > <c> > <d1>one</d1> > <d2></d2> > <d3></d3> > <d4>four</d4> > <d5>five</d5> > <d6>six</d6> > <d7>seven</d7> > <d8>eight</d8> > <d9>nine</d9> > <d10>ten</d10> > </c> > </b> > </a> > > Many thanks! Hi Vic, Here's one solution to your problem: With your source xml document (just above), the following transformation: ============================ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <table> <xsl:apply-templates select="/*/*/*/*[normalize-space()][position() mod 2 = 1]" mode="row"/> </table> </xsl:template> <xsl:template match="*" mode="row"> <tr> <xsl:apply-templates select=". | following-sibling::* [normalize-space()][1]"/> </tr> </xsl:template> <xsl:template match="*"> <td><xsl:value-of select="name()"/></td> <td><xsl:value-of select="."/></td> </xsl:template> </xsl:stylesheet> when applied produces the desired result: ======================================== <table> <tr> <td>d1</td> <td>one</td> <td>d4</td> <td>four</td> </tr> <tr> <td>d5</td> <td>five</td> <td>d6</td> <td>six</td> </tr> <tr> <td>d7</td> <td>seven</td> <td>d8</td> <td>eight</td> </tr> <tr> <td>d9</td> <td>nine</td> <td>d10</td> <td>ten</td> </tr> </table> Hope this helped. ===== Cheers, Dimitre Novatchev. http://fxsl.sourceforge.net/ -- the home of FXSL __________________________________________________ Do you Yahoo!? Faith Hill - Exclusive Performances, Videos & More http://faith.yahoo.com XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Stupid newbie question.., David Carlisle | Thread | [xsl] msxml img tag problem, Wineman, Corey J. |
[xsl] Stupid newbie question.., Jordan S. Jones | Date | Re: Functional Language wasRE: [xsl, Kurt Cagle |
Month |