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> </xsl:text>
</xsl:for-each>
<xsl:text> </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