|
Subject: Re: [xsl] select name of element / deal with embedded for-each From: Niclas Hedhman <niclas@xxxxxxxxxxx> Date: Sun, 30 May 2004 06:27:12 +0800 |
Hi,
Forget <xsl:for-each>, you rarely need it.
The following templates should work. Note the 'double-slash', which means "any
descendants at any level below".
<xsl:template match="SOURCES" >
<html>
<body>
<table>
<tr>
<td>INDEX_A</td>
<xsl:apply-templates select="SOURCE//INDEX_A" />
</tr>
<tr>
<td>INDEX_B</td>
<xsl:apply-templates select="SOURCE//INDEX_B" />
</tr>
<tr>
<td>INDEX_C</td>
<xsl:apply-templates select="SOURCE//INDEX_C" />
</tr>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="INDEX_A" >
<td>
<xsl:value-of select="." />
</td>
</xsl:template>
<xsl:template match="INDEX_B" >
<td>
<xsl:value-of select="." />
</td>
</xsl:template>
<xsl:template match="INDEX_C" >
<td>
<xsl:value-of select="." />
</td>
</xsl:template>
Cheers
Niclas
On Sunday 30 May 2004 05:59, Xyan wrote:
> Hi,
>
> as a beginner, I try to transform an XML structure like this one :
>
> <SOURCES>
> <SOURCE CODE="SOURCE_1">
> <INDEX>
> <INDEX_A>A1</INDEX_A>
> <INDEX_B>B1</INDEX_B>
> <INDEX_C>C1</INDEX_C>
> </INDEX>
> </SOURCE>
> <SOURCE CODE="SOURCE_2">
> <INDEX>
> <INDEX_A>A2</INDEX_A>
> <INDEX_B>B2</INDEX_B>
> <INDEX_C>C2</INDEX_C>
> </INDEX>
> </SOURCE>
>
>
> into an HTML table :
>
> <html>
> <body>
> <table>
> <tr>
> <td>INDEX_A</td>
> <td>A1</td>
> <td>A2</td>
> </tr>
> <tr>
> <td>INDEX_B</td>
> <td>B1</td>
> <td>B2</td>
> </tr>
> <tr>
> <td>INDEX_C</td>
> <td>C1</td>
> <td>C2</td>
> </tr>
> </table>
> </body>
> </html>
>
> I have two difficulties :
> 1. How to select the name of an element (in my case : <INDEX_A> must
> become : <td>INDEX_A</td> ).
> 2. How to write the xslt in order to treat /at once/ EACH INDEX FOR EACH
> SOURCE. I have some difficulties because of the two xsl:for-each that
> must coexist.
>
>
> I have tried :
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:output method="html"/>
> <xsl:template match="/">
> <html>
> <body>
> <table border="1">
> <xsl:for-each select="/SOURCES/SOURCE[1]/INDEX/*">
> <tr>
> <xsl:for-each select="/SOURCES/SOURCE">
> <td>
> <xsl:value-of select="INDEX/*"/>
> </td>
> </xsl:for-each>
> </tr>
> </xsl:for-each>
> </table>
> </body>
> </html>
> </xsl:template>
> </xsl:stylesheet>
>
> but the result :
>
> A1 A2
> A1 A2
> A1 A2
>
>
> is, as you see and have guessed, bad.........
>
> Thanks a lot for your help.
>
> Xyan
--
+------//-------------------+
/ http://www.bali.ac /
/ http://niclas.hedhman.org /
+------//-------------------+
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] select name of element / deal, Xyan | Thread | RE: [xsl] select name of element / , Michael Kay |
| [xsl] select name of element / deal, Xyan | Date | RE: [xsl] select name of element / , Michael Kay |
| Month |