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

RE: variable outside a for-each loop

Subject: RE: variable outside a for-each loop
From: cknell@xxxxxxxxxx
Date: Thu, 20 Sep 2007 09:34:42 -0400
RE:  variable outside a for-each loop
I'm having a hard time mapping your input to your output, but that being said, you are certainly not "stuck with" your proposed solution. What you appear to be stuck with is a hard time in giving up the procedural programming model mind-set and letting yourself operate in the XSLT functional programming model.

Your input contains a <informaltable> with two <row> child elements. Each row has two <entry> child elements. 

Your output has a <table> root element with two <entry> child elements.

That's a total of four <entry> elements in the input that somehow map to two <entry> elements in the output.

Please explain your production rule a little more clearly and you will surely get a solution.

-- 
Charles Knell
cknell@xxxxxxxxxx - email



-----Original Message-----
From:     Mathieu Malaterre <mathieu.malaterre@xxxxxxxxx>
Sent:     Thu, 20 Sep 2007 14:52:27 +0200
To:       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject:   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

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.