[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Getting info from certain nodes only
Hi I've been going circles around this code for a while, so I thought to give the list a try. I intend to display only some info from an xml file, with a previously given configuration. In this case, the <header> part defines the columns from the <records> that should be displayed. In the example, field1 and field3 are the only ones that I want to see. I actually got this to work, but then the xsl sort was broken, and since I need the sort, I've been looking for an alternate solution. The closest I have come so far is to get the <columns> in a key, but then I'm having problem getting the values back, since I have not found a way to successfully reference them back. I used position() as the key value, but it seems to be getting only the first column, but not the second one, therefor I had to use an artificial "order" value, which I currently do not like. Also, since I have to go back to check out how many columns are there in the table (kind of an iteration - I miss the while's and for's...), I completely lose the sorting part. Is there also a way to count how many items you have in a key element? Or perhaps a way to use a key in a for-each statement? Any hints? Jorge partial xml data file ----------------------------------------------------------------- <data> <header> <column order="1" field="field1" align="left"> <title align="left">First</title> </column> <column order="2" field="field3" align="left"> <title align="left">Second</title> </column> </header> <records> <row> <cell src="field1">John</cell> <cell src="field2">A</cell> <cell src="field3">Smith</cell> <cell src="field4"></cell> <cell src="field5"></cell> </row> <row> <cell src="field1">William</cell> <cell src="field2"></cell> <cell src="field3">Thompson</cell> <cell src="field4"></cell> <cell src="field5"></cell> </row> <row> <cell src="field1">Mark</cell> <cell src="field2"></cell> <cell src="field3">Martinez</cell> <cell src="field4"></cell> <cell src="field5"></cell> </row> <row> <cell src="field1">George</cell> <cell src="field2">S</cell> <cell src="field3">Wilson</cell> <cell src="field4"></cell> <cell src="field5"></cell> </row> <row> <cell src="field1">Charles</cell> <cell src="field2"></cell> <cell src="field3">Jackson</cell> <cell src="field4"></cell> <cell src="field5"></cell> </row> </records> </data> partial xslt stylesheet ------------------------------------------------------------------ <xsl:variable name="numberOfColumns" select="count(/data/header/column)"/> <xsl:key name="showColumns" match="/data/header/column" use="@order" /> <xsl:template name="createRow"> <xsl:value-of select="count(records/row)"></xsl:value-of> <xsl:for-each select="records/row"> <xsl:sort select="cell[1]"/> <xsl:variable name="currentRow" select="position()"/> <tr class="fondo{position() mod 2}"> <xsl:for-each select="//column"> <xsl:variable name="currentCol" select="position()"/> <td> <xsl:variable name="currentField" select="key('showColumns', $currentCol)/@field"/> <b><xsl:value-of select="$currentField"/></b> <xsl:value-of select="//row[$currentRow]/cell[@src=$currentField]"/> </td> </xsl:for-each> </tr> </xsl:for-each> </xsl:template> current output ----------------------------------------------------------------------- FirstSecondEditar field1 John field3Smith field1 William field3Thompson field1 Mark field3Martinez field1 George field3Wilson field1 Charles field3Jackson XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|