xsl-list
[Top] [All Lists]

Re: [xsl] modify output document elements

2020-03-04 12:01:21
You can put a constructed sub-tree in a variable:

<xsl:variable name="t">
  <table>
    ...
  </table>
</xsl:variable>

and then do further transformations on the content of this variable

<xsl:apply-templates select="$t" mode="post-process"/>

If you're still using the old XSLT 1.0 version, there are restrictions on using 
variables this way, which (with most processors) you can get around with an 
extension function:

<xsl:apply-templates select="exsl:node-set($t)" mode="post-process"/>

Michael Kay
Saxonica

On 4 Mar 2020, at 17:49, Kammering, Raimund 
raimund(_dot_)kammering(_at_)desy(_dot_)de 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:

Hello,

I have a stylesheet which creates a HTML output document dynamically based on 
the incoming XML file. I use some for-each loop to get the processing done in 
the right order. My layout causes the stylesheet to look like this:

 <xsl:template name="details_table">
   <table border="0" cellspacing="0">
     <tr>
       <td width="64px">
         <a href="#" onclick="toggle('{$details_table}')" title="show/hide 
details">
           <img src="show_hide.png"/>
         </a>
       </td>
       <td>
         Details
       </td>
     </tr>
     <table id="{$details_table}" cellspacing="3" style="display: block">
       <tr>
         <td width="64px">
           <img border="0" src="{$imagedir}/null.gif"/>
         </td>
         <th align="left">Start</th>
         <th align="left">End</th>
         <th align="left">Duration [h]</th>
         <th align="left">Type</th>
         <th align="left">Category</th>
         <th align="left">Comment</th>
       </tr>

       <xsl:for-each 
select="entry[severity='STATISTICS']/statistics_category">
         ...
         <xsl:choose>
           <xsl:when test=".='Down'">
             <td width="150" valign="top">
               <xsl:choose>
                 <xsl:when test="../Down='not_set'">
                    <font color="red">not_set</font>
                 </xsl:when>
                 <xsl:otherwise>
                    <xsl:value-of select="../Down"/>
                 </xsl:otherwise>
               </xsl:choose>
             </td>
           </xsl:when>
           ...
       </xsl:for-each>
     </table>
   </table>
 </xsl:template>

Now I would like to modify the style of the details_table depending on the 
outcome of the test within the for-each loop. Since the table element has 
already been created, I do not know how one could do this without changing 
the overall logic. Is there a way to access the elements of the created HTML 
DOM tree from within the stylesheet? Or am I hunting in the wrong direction?!

Any ideas/help welcome - greetings,
Raimund Kammering

--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--
<Prev in Thread] Current Thread [Next in Thread>