|
Subject: Re: [xsl] variable outside a for-each loop: second try From: "Mathieu Malaterre" <mathieu.malaterre@xxxxxxxxx> Date: Thu, 20 Sep 2007 16:44:09 +0200 |
Hi Brad,
Sorry to not have been more verbose. Here is a more complete
example. Only the first column is allowed to be empty. All other are
non-emtpy. There can be any aribtrary empty col#1 (so looking at only
the very preceeding row will not work).
<?xml version="1.0"?>
<table>
<row>
<entry>
<para>Col1 A</para>
</entry>
<entry>
<para>Col2 A</para>
</entry>
</row>
<row>
<entry>
<para/>
</entry>
<entry>
<para>Col2 B</para>
</entry>
</row>
<row>
<entry>
<para/>
</entry>
<entry>
<para>Col2 C</para>
</entry>
</row>
<row>
<entry>
<para>Col1 D</para>
</entry>
<entry>
<para>Col2 D</para>
</entry>
</row>
...
</table>
It looks like my problem is getting too complex. So I am thinking that
my initial design is poor. Since I have control over the output
format, I am thinking that I could also generate:
<table>
<col1 name="Col1 A">
<col2 name="Col2 A"/>
<col2 name="Col2 B"/>
<col2 name="Col2 C"/>
</col1>
<col1 name="Col1 D">
<col2 name="Col2 D"/>
</col1>
...
</table>
I am grouping by common col1 all my entries. It should be slightly
smarted to parse afterward.
Thanks again
-Mathieu
On 9/20/07, Bjorndahl, Brad <brad.bjorndahl@xxxxxxxxxxxxxxxx> wrote:
> Hi,
>
> Something more along the lines of the following will work. I assume you want to carry the last non-empty para content to any empty attribute in the same relative position. Your sample data is too meagre to be sure.
>
> Learn XPath to get to nodes in your XML.
>
> If you change your attribute names to something like "col1', 'col2', etc., this can be generalised much more easily.
> I'm not sure that the string-join does much in this transform.
>
>
> <?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="/informaltable" >
> <table>
> <xsl:apply-templates />
> </table>
> </xsl:template>
>
> <xsl:template match="row">
> <entry>
> <xsl:for-each select="entry" >
> <xsl:variable name="position" select="position()" />
> <xsl:variable name="attName"><xsl:value-of select="('one', 'two')[$position]" /></xsl:variable>
>
> <xsl:attribute name="{$attName}" >
> <xsl:choose>
> <xsl:when test="para eq ''" >
> <xsl:value-of select="../preceding-sibling::row/entry[position() eq $position][1]/normalize-space(string-join(para,' '))" />
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of select="normalize-space(string-join(para,' '))" />
> </xsl:otherwise>
> </xsl:choose>
> </xsl:attribute>
> </xsl:for-each>
> </entry>
> </xsl:template>
>
> </xsl:transform>
>
> Brad
>
>
> -----Original Message-----
> From: Mathieu Malaterre [mailto:mathieu.malaterre@xxxxxxxxx]
> Sent: September 20, 2007 8:52 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] variable outside a for-each loop
>
> Hello,
>
> this is clearly a question that has been asked many times on this mailing list. But I simply cannot find anything smart to do for my
> issue:
>
> I have the following XML (docbook):
>
> <informaltable>
> <row>
> <entry>
> <para>ABC</para>
> </entry>
> <entry>
> <para>DEF</para>
> </entry>
> </row>
> <row>
> <entry>
> <para/>
> </entry>
> <entry>
> <para>DEF 2</para>
> </entry>
> </row>
> </informaltable>
>
> My goal is to produce:
>
> <table>
> <entry one="ABC" two="DEF"/>
> <entry one="ABC" two="DEF 2"/>
> </table>
>
>
> In C/C++ this is trivial at each step whenever row/entry is empty I would use some local variable instead. But in XSL I am stuck with:
>
> <xsl:for-each select="row">
> <xsl:variable name="one"
> select="normalize-space(string-join(entry[1]/para,' '))"/>
> <xsl:variable name="two"
> select="normalize-space(string-join(entry[2]/para,' '))"/>
> <entry one="{$one}" two="{$two}"/>
> </xsl:for-each>
>
> Could someone please let me know what the correct solution is when using XSL ?
>
> Thanks so much;
>
> --
> Mathieu
>
>
--
Mathieu
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Using for-each w/ page-se, Abel Braaksma | Thread | RE: [xsl] variable outside a for-ea, Bjorndahl, Brad |
| RE: [xsl] variable outside a for-ea, Bjorndahl, Brad | Date | Re: [xsl] Using for-each w/ page-se, Sharon_Harris |
| Month |