[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Need help combing two elements

Subject: Re: Need help combing two elements
From: "Fatbob" <fatbob73@xxxxxxxxxxx>
Date: Mon, 30 Mar 2009 00:03:13 -0400
Re:  Need help combing two elements
Hi Syd,

Well basically, this XSL is used to build a report. Here is a sample of the report that this XSL builds as it is now...

http://img12.imageshack.us/img12/7903/samplereport.jpg

What I'm trying to do is combine the first two columns into one column. So instead of having a column for date (the collect column), and a column for time (right next to Collect), I want that to be displayed in one column, similar to Resulted. Ultimately, I'd like to also convert the date to a different format (yyyy-MM-dd hh:mm), but one step at a time.

Well I didn't include LabHeaderCell, as that is not the part of the XSL that is giving my a head ache. LabHeaderCell is used to display the header (where you see Name:, MRN: Age: and Sex:). As for the variable $reportType, it's simply used to determine that this is a Laboratory report.

The part of the XSL that fills (not sure if that is the correct terminology) the table is...

 <fo:table-body>
     <xsl:for-each select="Row">
      <xsl:if test="@Type='Data'">
       <fo:table-row keep-together.within-column="always">
     <!--both a="$tempDate" b="$tempTime"/-->

<xsl:for-each select="Cell[position() = 1 or position() = 2 or position() = 3 or position() = 6 or position() = 7 or position() = 8 or position() = 9 or position() = 10]">
<xsl:call-template name="LabDataCell"/>
</xsl:for-each>
</fo:table-row>
</xsl:if>
</xsl:for-each>
</fo:table-body>


and...

<xsl:template name="LabDataCell">
<xsl:choose>
<xsl:when test="@Status='Panic'">
<fo:table-cell color="red" background-color="white" border="1pt solid black" wrap-option="wrap" overflow="hidden">
<fo:block font-size="8pt" padding="1mm" margin-left=".25mm" overflow="hidden" language="ru" hyphenate="true">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:when>
<xsl:otherwise>
<fo:table-cell color="black" background-color="white" border="1pt solid black" wrap-option="wrap" overflow="hidden">
<fo:block font-size="8pt" padding="1mm" margin-left=".25mm" overflow="hidden" language="ru" hyphenate="true">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:otherwise>
</xsl:choose>
</xsl:template>


So I figure Hermann's suggestion should go somewhere in the above snippet of XSL?

----- Original Message ----- From: "Syd Bauman" <Syd_Bauman@xxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Sunday, March 29, 2009 11:05 PM
Subject: Re: Need help combing two elements



and my XSL is the following (well a snippet of it, ...

Actually, it would probably be easier to provide advice if you sent the entire XSLT (or a pointer to it), as it is quite difficult to test what you sent, as we don't have access to $reportType, LabHeaderCell, etc.

I've got your input:

<Row Type="Data">
 <Cell>Mar 23, 2006</Cell>
 <Cell>08:44</Cell>
</Row>

But what do you want the output to look like?


While we're here, though, some thoughts follow.


      <xsl:for-each select="Row">
       <xsl:if test="@Type='Header'">
         <xsl:for-each select="Cell">
           <fo:table-column/>
         </xsl:for-each>
       </xsl:if>
     </xsl:for-each>

Couldn't this be expressed a bit more simply as


     <xsl:for-each select="Row[@Type='Header']/Cell">
       <fo:table-column/>
     </xsl:for-each>

?

<xsl:choose>
<xsl:when test="@Status='Panic'">
<fo:table-cell color="red" background-color="white" border="1pt solid
black" wrap-option="wrap" overflow="hidden">
<fo:block font-size="8pt" padding="1mm" margin-left=".25mm"
overflow="hidden" language="ru" hyphenate="true">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:when>
<xsl:otherwise>
<fo:table-cell color="black" background-color="white" border="1pt solid
black" wrap-option="wrap" overflow="hidden">
<fo:block font-size="8pt" padding="1mm" margin-left=".25mm"
overflow="hidden" language="ru" hyphenate="true">
<xsl:value-of select="."/>
</fo:block>
</fo:table-cell>
</xsl:otherwise>
</xsl:choose>

Since most of the content of the <when> and the <otherwise> are the same, I'd be inclined to factor out the similarities:

 <xsl:template name="LabDataCell">
   <xsl:variable name="color">
     <xsl:choose>
       <xsl:when test="@Status='Panic'">red</xsl:when>
       <xsl:otherwise>black</xsl:otherwise>
     </xsl:choose>
   </xsl:variable>
   <fo:table-cell color="{$color}" background-color="white"
     border="1pt solid black" wrap-option="wrap" overflow="hidden">
     <fo:block font-size="8pt" padding="1mm" margin-left=".25mm"
       overflow="hidden" language="ru" hyphenate="true">
       <xsl:value-of select="."/>
     </fo:block>
   </fo:table-cell>
 </xsl:template>


I'm sure others on the list will point out if & where I'm wrong.

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.