xsl-list
[Top] [All Lists]

RE: very Simple nested for each loops...

2003-08-06 16:43:39
Hi.

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Andy(_dot_)Benson(_at_)arm(_dot_)com
Sent: Wednesday, August 06, 2003 4:52 PM
To: XSL-List(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] very Simple nested for each loops...


Hi I have some simple perl code that I want to convert into a 
XSL stylesheet. The variables $set1 and $set2 would be 
configured in XML. Any simple suggestions are very welcome.

best regards

Andy




This can be done using a config file where you can set the rules to work.
Main xml file:
<mux>
  <set1>1</set1>
  <set2>0</set2>
</mux>

XML config file:
<config>
  <set name="set1" on="1">
    <letters>
      <letter value="a"/>
      <letter value="b"/>
    </letters>
    <numbers>
      <number value="0"/>
      <number value="1"/>
      <number value="2"/>
      <number value="3"/>
    </numbers>
  </set>
  <set name="set2">
    <letters>
      <letter value="x"/>
      <letter value="y"/>
      <letter value="z"/>
    </letters>
    <numbers>
      <number value="0"/>
      <number value="1"/>
      <number value="2"/>
      <number value="3"/>
      <number value="4"/>
      <number value="5"/>
    </numbers>
  </set>
</config>

Stylesheet:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:output method="text"/>
  <xsl:template match="mux">
    <xsl:variable name="cnfg" select="document('config.xml')/config"/>
    <xsl:apply-templates select="document('config.xml')/config/*">
      <xsl:with-param name="sets" select="current()/*"/>
    </xsl:apply-templates>
  </xsl:template>
  <xsl:template match="set">
    <xsl:param name="sets" select="/.."/>
    <xsl:apply-templates mode="mux" select="$sets[name()=current()/@name and
normalize-space()=current()/@on]">
      <xsl:with-param name="letters" select="current()/letters"/>
      <xsl:with-param name="numbers" select="current()/numbers"/>
    </xsl:apply-templates>
  </xsl:template>
  <xsl:template match="*" mode="mux">
    <xsl:param name="letters" select="/.."/>
    <xsl:param name="numbers" select="/.."/>
    <xsl:for-each select="$letters/letter">
      <xsl:variable name="letter" select="@value"/>
      <xsl:for-each select="$numbers/number">
        <xsl:value-of select="$letter"/>
        <xsl:value-of select="@value"/>
        <xsl:text> &#10;</xsl:text>
      </xsl:for-each>
      <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Hope this helps you.

Regards,
Americo Albuquerque

(...)


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>