Subject: Re: [xsl] 2 columns with special conditions From: George Cristian Bina <george@xxxxxxxxxxxxx> Date: Fri, 04 May 2007 13:56:45 +0300 |
Regards, George --------------------------------------------------------------------- George Cristian Bina - http://aboutxml.blogspot.com/ <oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger http://www.oxygenxml.com
Hi Brad,
that works very well and it's very easy to understand! I just had to change <xsl:when test="following-sibling::mc[1]/@type eq 'C'" > to <xsl:when test="following-sibling::mc[1]/@type = 'C'" >
@George Cristian Bina Yours is great too, but the other one fits better, thanks.
Thanks
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> ...
-- ===============================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] 2 columns with special co, Sven Waibel | Thread | RE: [xsl] 2 columns with special co, Bjorndahl, Brad |
Re: [xsl] 2 columns with special co, Sven Waibel | Date | [xsl] XSLT: Taking Value of One Att, Rex Rex |
Month |