xsl-list
[Top] [All Lists]

Re: whats the best way to create and use values for lookup (key-value) such that you can loop through it with limits

2003-09-12 23:39:02
One of the basic XSLT design patterns is about maintaining useful
programming data structures within the XSLT code.

XSLT allows to have arbitrary global scope elements belonging to a namespace
different from the XSLT namespace. Within such elements one can put any data
structure, which may be used in the transformation.

Here's a simple example of this technique that shows how to solve the
current problem:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
 xmlns:myStruct="my:Struct"
 exclude-result-prefixes="myStruct">

 <xsl:output method="html" indent="yes"/>

 <xsl:variable name="vmaxCols" select="2"/>
 <myStruct:section1>
   <col1>20</col1>
   <col2>30</col2>
   <col3>10</col3>
   <col4>40</col4>
 </myStruct:section1>

 <myStruct:section2>
   <mycol1>30</mycol1>
   <mycol2>20</mycol2>
   <mycol3>40</mycol3>
 </myStruct:section2>

  <xsl:template match="section1 | section2">

  <table border="1">
    <tr>
      <xsl:for-each
      select="document('')/*/myStruct:*
                    [local-name() = name(current())]/*
                                [position() &lt;= $vmaxCols]">

       <td width="{.}"><xsl:value-of select="."/></td>
      </xsl:for-each>
    </tr>
  </table>

  </xsl:template>
</xsl:stylesheet>


When the above transformation is applied on this source.xml:

<t>
  <section1>
    <row col1="x1" col2="y1" col3="z1"/>
    <row col1="x2" col2="y2" col3="z2"/>
    <row col1="x3" col2="y3" col3="z3"/>
    <row col1="x4" col2="y4" col3="z4"/>
  </section1>
  <section2>
    <row mycol1="x1" mycol2="y1" mycol3="z1"/>
    <row mycol1="x2" mycol2="y2" mycol3="z2"/>
    <row mycol1="x3" mycol2="y3" mycol3="z3"/>
  </section2>
</t>

the wanted result is produced:

<table border="1">
   <tr>
      <td width="20">20</td>
      <td width="30">30</td>
   </tr>
</table>

<table border="1">
   <tr>
      <td width="30">30</td>
      <td width="20">20</td>
   </tr>
</table>


=====
Cheers,

Dimitre Novatchev.
http://fxsl.sourceforge.net/ -- the home of FXSL



"SANWAL, ABHISHEK (HP-Houston)" <abhishek(_dot_)sanwal(_at_)hp(_dot_)com> wrote 
in message
news:24B68DDCFD49004882CD8D02D2E4338AFFBFD2(_at_)cceexc15(_dot_)americas(_dot_)cpqcorp(_dot_)net(_dot_)(_dot_)(_dot_)
How to pickup and insert values for individual column widths from
variables/params/(any other value holder with local scope) already
present in the XSL by limiting the number of values picked up to a
variable that defines the number of columns or a separate count ?

Basically I want to be able to specify in a template for a section the
values for the column widths for a table that is present in that
section.
 that matches a table XML structure the

<xsl: template match section >
<!-- values for column widths -->
col 1 = 20
col 2 = 30
col 3 = 10
col 4 = 40
col 5 = "" <!-- may or may not be null ...that issue is open >


<apply-template table/>

<xsl: /template>

<xsl: template match "table">

<! Will use those values and apply them to the columns that it creates
dynamically based on the number of columns present in the XML structure


How can I define the following so as to easily pickup values while
iterating over the above value set defined in the XSL

THOUGH PROCESS :::
--------------------------
whats the best way to create and use values for lookup such that you can
loop through it (like a key value pair that can be looped through )

Basically if I have J=10 values defined

MC0 = 10
MC2 = 12
MC3 = 9
MC4 = 17
..
etc.

(these values must be stored somehow in the XSL file)

How can I iterate and limit the pick up of values from 0 to I where I is
another variable that is less than J=10.

1st. How would you suggest storing the values ? variables ? params ?
key()
(I have not used key before.. just read somewhere that it can be used as
such)

2nd. If I use one of the above structures for iteration then how do I
iterate through and limit the pickup of values to I ??

I want to be able to define the use of the variables based on an
Iterator.


Abhishek Sanwal
HP - Houston Campus
abhishek(_dot_)sanwal(_at_)hp(_dot_)com



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list






 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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