xsl-list
[Top] [All Lists]

Re: [xsl] 2 columns with special conditions

2007-05-04 07:47:38
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[(_at_)type='F']">
        <tr>
            <td><xsl:number count="mc[(_at_)type='F' or (@type='C' and
not(preceding-sibling::*[1][(_at_)type='F']))]"/></td>
            <td><xsl:value-of select="@name"/></td>
            <td><xsl:value-of
select="following-sibling::*[1][(_at_)type='C']/@name"/></td>
        </tr>
    </xsl:template>
    <xsl:template
match="mc[(_at_)type='C'][not(preceding-sibling::*[1][(_at_)type='F'])]">
        <tr>
            <td><xsl:number count="mc[(_at_)type='F' or (@type='C' and
not(preceding-sibling::*[1][(_at_)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(_dot_)waibel(_at_)imbus(_dot_)de] Sent: May 
3, 2007
10:06 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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()[(_at_)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>
...

-- 
===============================================================


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--





--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--




-- 
===============================================================
imbus AG, Kleinseebacher Str. 9, 91096 Möhrendorf, DEUTSCHLAND
Tel. +49 9131 7518-0, Fax +49 9131 7518-50
info(_at_)imbus(_dot_)de 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(_at_)imbus(_dot_)de http://www.imbus.de

Vorsitzender des Aufsichtsrates: Hendrik Rässler
Vorstand: Tilo Linz, Bernd Nossem, Thomas Roßner, Jörg Schulten
Sitz der Gesellschaft: Möhrendorf, 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(_at_)imbus(_dot_)de http://www.imbus.de

Geschäftsführer: Frank Schmeißner, Jörg Schulten
Sitz der Gesellschaft: Hofheim
Registergericht: Frankfurt am Main, HRB 52155 
===============================================================


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

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