Re: [xsl] 2 columns with special conditions

Subject: Re: [xsl] 2 columns with special conditions
From: Sven Waibel <sven.waibel@xxxxxxxx>
Date: Fri, 04 May 2007 16:47:21 +0200
Hi George,

you gave me a reality check.
I'm so stupid ;)

Thanks a lot!

Sven

George Cristian Bina schrieb:
> Just add a new column to my previous solution and count the mc elements
> that define a row:
> 
> <?xml version='1.0'?>
> <xsl:transform version="1.0"
>     xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>     <xsl:template match="steps">
>         <table border="1">
>             <xsl:apply-templates/>
>         </table>
>     </xsl:template>
>     <xsl:template match="mc[@type='F']">
>         <tr>
>             <td><xsl:number count="mc[@type='F' or (@type='C' and
> not(preceding-sibling::*[1][@type='F']))]"/></td>
>             <td><xsl:value-of select="@name"/></td>
>             <td><xsl:value-of
> select="following-sibling::*[1][@type='C']/@name"/></td>
>         </tr>
>     </xsl:template>
>     <xsl:template
> match="mc[@type='C'][not(preceding-sibling::*[1][@type='F'])]">
>         <tr>
>             <td><xsl:number count="mc[@type='F' or (@type='C' and
> not(preceding-sibling::*[1][@type='F']))]"/></td>
>             <td></td>
>             <td><xsl:value-of select="@name"/></td>
>         </tr>
>     </xsl:template>
> </xsl:transform>
> 
> Regards,
> George
> ---------------------------------------------------------------------
> George Cristian Bina - http://aboutxml.blogspot.com/
> <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com
> 
> 
> Sven Waibel wrote:
>> Hi all,
>>
>> i got another problem. I want to have a numbering in each row:
>>
>> What i want:
>>
>> Index   TypeF  TypeC
>> 1         -        1
>> 2         2        3
>> 3        4        5
>>
>> But i don't know if it has 1,2 or 3... rows.
>>
>> Possibilities:
>>
>> F=type F
>> C = type C
>>
>> 1) number of F more than C
>> F    C
>> F    -
>> F    C
>>
>> 2) number of F equals C
>> -    C
>> -    C
>> F    -
>> F    -
>>
>> 3) number of C more than F
>> -    C
>> -    C
>> -    C
>> -    C
>>
>> I'm using template below (extended with a cell for my numbering):
>>
>> I hope that my explanation is not so confusing.
>>
>> Thanks again
>> Sven
>>
>> Bjorndahl, Brad schrieb:
>>> Hi,
>>>
>>> I take a direct (non-clever) approach. This works. . .
>>>
>>> <?xml version='1.0'?>
>>> <xsl:transform version="2.0"
>>> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; >
>>>
>>>  <xsl:output method="xml" indent="yes"/>
>>>  <xsl:template match="/allsteps">
>>>   <tables>
>>>    <xsl:apply-templates />
>>>   </tables>
>>>  </xsl:template>
>>>
>>>  <xsl:template match="steps">
>>>   <table>
>>>    <xsl:for-each select="mc" >
>>>     <xsl:choose>
>>>      <xsl:when test="@type = 'F'" >
>>>       <row>
>>>        <col><xsl:value-of select="@name" /></col>
>>>        <xsl:choose>
>>>         <xsl:when test="following-sibling::mc" > <!-- Not at end -->
>>>          <xsl:choose>
>>>           <xsl:when test="following-sibling::mc[1]/@type eq 'C'" >
>>>            <col><xsl:value-of select="following-sibling::mc[1]/@name"
>>> /></col>
>>>           </xsl:when>
>>>           <xsl:otherwise>
>>>            <col />
>>>           </xsl:otherwise>
>>>          </xsl:choose>
>>>         </xsl:when>
>>>         <xsl:otherwise> <!-- At end -->
>>>          <col/>
>>>         </xsl:otherwise>
>>>        </xsl:choose>
>>>       </row>
>>>      </xsl:when>
>>>                    
>>>      <xsl:when test="@type = 'C'" >
>>>       <xsl:choose>
>>>        <xsl:when test="preceding-sibling::mc" > <!-- Not at beginning
>>> -->
>>>         <xsl:choose>
>>>          <xsl:when test="preceding-sibling::mc[1]/@type eq 'C'" >
>>>           <row>
>>>            <col />
>>>            <col><xsl:value-of select="@name" /></col>
>>>           </row>
>>>          </xsl:when>
>>>         </xsl:choose>
>>>        </xsl:when>
>>>        <xsl:otherwise><!-- At beginning -->
>>>         <row>
>>>          <col/>
>>>          <col><xsl:value-of select="@name" /></col>
>>>         </row>
>>>        </xsl:otherwise>
>>>       </xsl:choose>
>>>      </xsl:when>
>>>     </xsl:choose>
>>>    </xsl:for-each>
>>>   </table>
>>>  </xsl:template>
>>> </xsl:transform>
>>> . . . on this data:
>>> <allsteps>
>>>   <steps>
>>>     <mc name="1" type="F"/>
>>>     <mc name="2" type="C"/>
>>>     <mc name="3" type="F"/>
>>>     <mc name="4" type="C"/>
>>>     <mc name="5" type="F"/>
>>>     <mc name="6" type="C"/>
>>>   </steps>
>>>   <steps>
>>>     <mc name="1" type="C"/>
>>>     <mc name="2" type="C"/>
>>>     <mc name="3" type="F"/>
>>>     <mc name="4" type="C"/>
>>>     <mc name="5" type="F"/>
>>>     <mc name="6" type="C"/>
>>>   </steps>
>>>   <steps>
>>>     <mc name="1" type="F"/>
>>>     <mc name="2" type="C"/>
>>>     <mc name="3" type="F"/>
>>>     <mc name="4" type="F"/>
>>>     <mc name="5" type="F"/>
>>>     <mc name="6" type="C"/>
>>>   </steps>
>>>   <steps>
>>>     <mc name="1" type="F"/>
>>>     <mc name="2" type="C"/>
>>>     <mc name="3" type="F"/>
>>>     <mc name="4" type="F"/>
>>>     <mc name="5" type="F"/>
>>>     <mc name="6" type="F"/>
>>>   </steps>
>>>   <steps>
>>>     <mc name="1" type="C"/>
>>>     <mc name="2" type="C"/>
>>>     <mc name="3" type="C"/>
>>>     <mc name="4" type="C"/>
>>>     <mc name="5" type="C"/>
>>>     <mc name="6" type="C"/>
>>>   </steps>
>>> </allsteps>
>>>
>>> Brad Bjorndahl
>>> Technical Publications
>>> Thermo Fisher Scientific
>>>
>>>
>>> -----Original Message-----
>>> From: Sven Waibel [mailto:sven.waibel@xxxxxxxx] Sent: May 3, 2007
>>> 10:06 AM
>>> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>>> Subject: [xsl] 2 columns with special conditions
>>>
>>> Hi,
>>>
>>> i have a "little" problem.
>>> I try to get a two column layout where all elements with type F live in
>>> column one and elements with type C in column two. Special thing is that
>>> you have watch the order. How can i achieve case 2 and 3?
>>>
>>> Thanks in advance
>>> Sven
>>>
>>> xml:
>>> case1:
>>>
>>> <mc name="1" type="F"/>
>>> <mc name="2" type="C"/>
>>> <mc name="3" type="F"/>
>>> <mc name="4" type="C"/>
>>> <mc name="5" type="F"/>
>>> <mc name="6" type="C"/>
>>>
>>> =>
>>> (first column always type F, second type C)
>>>
>>> 1    2
>>> 3    4
>>> 5    6
>>>
>>> there is no problem, template works.
>>>
>>>
>>> case2:
>>>
>>> <mc name="1" type="C"/>
>>> <mc name="2" type="C"/>
>>> <mc name="3" type="F"/>
>>> <mc name="4" type="C"/>
>>> <mc name="5" type="F"/>
>>> <mc name="6" type="C"/>
>>>
>>> =>
>>>
>>> -    1
>>> -    2
>>> 3    4
>>> 5    6
>>>
>>>
>>> case3:
>>>
>>> <mc name="1" type="F"/>
>>> <mc name="2" type="C"/>
>>> <mc name="3" type="F"/>
>>> <mc name="4" type="F"/>
>>> <mc name="5" type="F"/>
>>> <mc name="6" type="C"/>
>>>
>>> =>
>>>
>>> 1    2
>>> 3    -
>>> 4    -
>>> 5    6
>>>
>>> my xsl:
>>> ....
>>> <xsl:template match="step">
>>>     <xsl:for-each select="descendant::mc[position() mod 2 = 1]">
>>>         <tr>
>>>             <td>
>>>                 <xsl:value-of
>>> select="self::node()[@type='F']/@name"/>
>>>             </td>
>>>             <td>
>>>                 <xsl:value-of
>>> select="following-sibling::node()[position()+1 and @type='C']/@name"/>
>>>             </td>
>>>         </tr>
>>>     </xsl:for-each>
>>> </xsl:template>
>>> ...
>>>
>>> -- 
>>> ===============================================================
> 
> 
> 

-- 
===============================================================
imbus AG, Kleinseebacher Str. 9, 91096 Mvhrendorf, DEUTSCHLAND
Tel. +49 9131 7518-0, Fax +49 9131 7518-50
info@xxxxxxxx http://www.imbus.de

imbus AG, Unter der Linde 16, 80939 M|nchen, DEUTSCHLAND
Tel. +49 89 3219909-0, Fax +49 89 3219909-50
info@xxxxxxxx http://www.imbus.de

Vorsitzender des Aufsichtsrates: Hendrik Rdssler
Vorstand: Tilo Linz, Bernd Nossem, Thomas Ro_ner, Jvrg Schulten
Sitz der Gesellschaft: Mvhrendorf, M|nchen
Registergericht: F|rth/Bay, HRB 8365
---------------------------------------------------------------
imbus Rhein-Main GmbH, Zanggasse 6, 65719 Hofheim, DEUTSCHLAND
Tel. +49 6192 92192-0, Fax +49 6192 92192-50
info@xxxxxxxx http://www.imbus.de

Geschdftsf|hrer: Frank Schmei_ner, Jvrg Schulten
Sitz der Gesellschaft: Hofheim
Registergericht: Frankfurt am Main, HRB 52155 
===============================================================

Current Thread