xsl-list
[Top] [All Lists]

RE: [xsl] variables, grouping, and result-documents

2007-12-18 15:50:28
You could replace

<xsl:variable name="stateName" select="current-group()/@state"/>

by

<xsl:variable name="stateName" select="current-group()[1]/@state"/> 

or more simply by

<xsl:variable name="stateName" select="current-grouping-key()"/>

Michael Kay
http://www.saxonica.com/


-----Original Message-----
From: Terry Ofner [mailto:tofner(_at_)comcast(_dot_)net] 
Sent: 18 December 2007 21:28
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] variables, grouping, and result-documents

I am having trouble naming result documents. Here is a style 
sheet that included two-level grouping and a result-document 
statement.

<xsl:stylesheet version="2.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
      xmlns:fo="http://www.w3.org/1999/XSL/Format";>
<xsl:output method="xml" indent="no"/>

<!--State Standards file-->
<xsl:variable name="StateFile" 
select="document('stateCodes.xml')" /> <xsl:key 
name="standard" match="state" use="@abbr" />

<!--Lesson Name file-->
<xsl:variable name="lessonFile" 
select="document('Grade4Skills.tab')" /> <xsl:key 
name="lessonName_by_num" match="skill" use="@num" />


   <!--start grouping by states and naming result-documents-->

   <xsl:template match="/">
     <xsl:for-each-group select="/Root/Story/State_Standard" 
group- by="@state">
      <xsl:variable name="stateName" select="current-group()/@state"/>
         <xsl:result-document href="{$stateName}.fo">

<!--Define FO page layouts and Place State Standard at top of 
table--> <!--fo:master page formatting cut out:-->

<fo:static-content flow-name="headerRest">
         <fo:block text-align="end"
           font-size="10pt"
           font-family="serif"
           line-height="14pt" >
           Reading Express Level D / <xsl:variable name="LocalState"  
select="$stateName" />
           <xsl:for-each select="$StateFile">
             <xsl:value-of select="key('standard', $LocalState)" />
           </xsl:for-each> Correlation - p. <fo:page-number/>
         </fo:block>
       </fo:static-content>

       <fo:flow flow-name="xsl-region-body"> <fo:block 
font-size="16pt"
           font-family="sans-serif"
           font-weight="bold"
           line-height="24pt"
           space-after.optimum="15pt"
           background-color="gray"
           color="white"
           text-align="center">
  <xsl:variable name="LocalState" select="$stateName" /> 
<xsl:for-each select="$StateFile"> <xsl:value-of 
select="key('standard', $LocalState)" /> </xsl:for-each>
         </fo:block>
   <fo:block font-size="11pt"
     font-family="serif"
     line-height="24pt"
     space-after.optimum="15pt"
     background-color="white"
     color="black"
     text-align="left">
     <xsl:variable name="LocalState" select="$stateName" />
     This chart correlates the <xsl:for-each 
select="$StateFile"><xsl:value-of select="key('standard', 
$LocalState)" /></xsl:for-each> to the lessons of Reading 
Express, Level D.
   </fo:block>


<fo:table-body>
        <xsl:for-each-group select="current-group()/SS" group-by=".">
             <xsl:sort select="."/>
          <fo:table-row border-color="black" border-width="0.5pt"  
border-style="solid" keep-together.within-page="always">

            <fo:table-cell padding="4pt" 
keep-together.within- page="always">
           <fo:block text-align="left" font-size="11pt" font- 
family="serif" text-indent="-24pt" start-indent="24pt">
               <xsl:copy-of select="node()"/>
           </fo:block>
         </fo:table-cell>
               <xsl:variable name="skillNumber" 
select="current-group ()/../@skill"/>
                   <xsl:for-each select="$lessonFile">
                     <fo:table-cell padding="4pt" keep- 
together.within-page="always">
             <fo:block text-align="left" font-size="11pt" 
font- family="serif">
               <xsl:copy-of select="key('lessonName_by_num', 
$skillNumber)/child::node()" />
           </fo:block>
          </fo:table-cell>
          </xsl:for-each>
       </fo:table-row>
              </xsl:for-each-group>
</fo:table-body>
   </fo:table>

   </fo:flow>
     </fo:page-sequence>
   </fo:root>
       </xsl:result-document>
     </xsl:for-each-group>
   </xsl:template>
</xsl:stylesheet>

The source xml contains multiple standards each for all 50 
states and DC.

<?xml version="1.0"?>
<Root>
     <Story>
         <State_Standard skill="01" state="AZ">
             <State>Arizona Standards</State>
             <SS>1.4.1 Use knowledge of root words and 
affixes to determine the meaning of unknown
                 words.</SS>
         </State_Standard>
     </Story>
       <State_Standard skill="29" state="CA">
             <State>California Standards</State>
             <SS>2.1 Identify structural patterns found in 
informational text to strengthen
                 comprehension.</SS>
         </State_Standard>
     </Story>
</Root>

The contents of the resulting documents look great. It is the 
resulting file names that are loopy. Here are the names of 
two of my resulting files:

FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL 
FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL 
FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL FL.fo

and

CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA  
CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA  
CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA CA.fo

It seems that I have this variable line in the wrong place:

<xsl:variable name="stateName" select="current-group()/@state"/>

Am I trying to do too much inside this one template?
Do I need two templates?

Thanks in advance,

Terry Ofner


--~------------------------------------------------------------------
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>
--~--