This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: comparison of attribute values
- From: "J.Pietschmann" <j3322ptm at yahoo dot de>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Thu, 30 May 2002 23:34:25 +0200
- Subject: Re: [xsl] comparison of attribute values
- References: <006701c207fc$96715d00$9865fea9@DUNNINGVAIO>
- Reply-to: xsl-list at lists dot mulberrytech dot com
jdunning wrote:
> Hi,
> What I would like to do is to insert a row into a table if there is a
> difference in an attribute value anywhere in the document; for example, this
> data should produce 2 columns (USD and EUR):
>
> <fees>
> <basic-fees>
> <fee1 currency="USD"><amount>20</amount></fee1>
> <fee2 currency="EUR"><amount>25</amount></fee2>
> </basic-fees>
> <special-fees>
> <fee3 currency="EUR"><amount>20</amount></fee3>
> </special-fees>
> <total currency="USD">65</total>
> </fees>
>
> <!-- desired output for above doc -->
> <table>
> <tr><td>FEE</td><td>USD</td><td>EUR</td></tr>
> <tr><td>fee1</td><td> 20 </td><td> </td></tr>
> <tr><td>fee2 </td><td> </td><td> 25 </td></tr>
> <tr><td>fee3</td><td> </td><td> 20 </td> </tr>
> <tr><td>total</td><td> 65 </td><td> </td></tr>
> </table>
It's a grouping problem.
<xsl:key name="fee-currency" match="*[@currency and substring(local-name(),1,3)='fee']"
use="@currency"/>
<xsl:template match="fees">
<table>
<tr>
<xsl:for-each select="key('fee-currency')/@currency">
<td><xsl:value-of select="."/></td>
</xsl:for-each>
</tr>
<xsl:for-each select="*/*[substring(local-name(),1,3)='fee']">
<tr>
<xsl:variable name="fee" select="."/>
<xsl:for-each select="key('fee-currency')/@currency">
<td>
<xsl:if test="$fee/@currency=.">
<xsl:value-of select="$fee/amount"/>
</xsl:if>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</xsl:template>
(Beware: untested)
Are you sure your fees are nemed fee1, fee2 rather than <fee name="fee1"> etc?
J.Pietschmann
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list