|
Subject: [xsl] Reshuffling elements From: Morten Ryg <mort-ry@xxxxxxxxx> Date: Tue, 26 Oct 2004 13:32:15 +0200 |
Exporting records from a Filemaker file, I get an XML file with the following structure for each record:
<row modid="147" recordid="20">
<col> <!-- Category -->
<data>
Medicine
</data>
</col>
<col> <!-- Journal name -->
<data>
British Medical Journal
</data>
</col>
<col> <!-- URL -->
<data>
http://bmj.bmjjournals.com/
</data>
</col>
<col>
<data>
Fulltekstartikler tilgjengelig ved publikasjon
</data>
</col>
<col> <!-- col 5: Auxiliary categories -->
<data>
Publisher
</data>
<data>
Organisation
</data>
</col>
<col> <!-- col 6: Name of auxiliary link -->
<data>
BMJ Publishing Group
</data>
<data>
British Medical Association
</data>
</col>
<col> <!-- col 7: Auxiliary URL -->
<data>
http://www.bmjpg.com/
</data>
<data>
http://www.bma.org.uk/
</data>
</col>
</row>
I want to transform this into HTML in the form
Journal title
Link category: Link name name, URL
There can be any number of <data> elements per <col> element for col no 5 - 7, but the same number for each of these columns.
The following code produces the output I am after for data element no 1:
<xsl:if test="./fmp:COL[6]/fmp:DATA[1] != '' ">
<p>
<em>
<xsl:value-of select="fmp:COL[5]/fmp:DATA[1]" />
<xsl:text>: </xsl:text>
</em>
<xsl:value-of select="fmp:COL[6]/fmp:DATA[1]" />
<xsl:text>, URL: </xsl:text>
<xsl:value-of select="fmp:COL[7]/fmp:DATA[1]" />
</p>
</xsl:if>
British Medical Journal
Organisation: British Medical Association, URL: http://www.bma.org.uk/
Publisher: BMJ Publishing Group, URL: http://www.bmjpg.com/
I can extend this to heart's content, by adding more blocks, and increasing the DATA[1] to DATA[2], DATA[3] and so on, but I would rather have solution for any number of auxiliary links. When I try the following;
<xsl:for-each select="fmp:COL[6]/fmp:DATA">
<xsl:param name="n_pos" select="position()" />
<p>
<xsl:value-of select="$n_pos" />.
<xsl:value-of select="." />,
<xsl:value-of select="../following-sibling/child[1]" />
</p>
</xsl:for-each>
I get the result:
British Medical Journal
1. British Medical Association,
2. BMJ Publishing Group,
in other words, the data elemenents of col[7] are left out.
If I modify the following-sibling line, using
<xsl:value-of select="../following-sibling::*" />
instead of
<xsl:value-of select="../following-sibling/child[1]" />,
I get a listing of the URLs of all auxiliary links after each auxiliary link name, as expected:
British Medical Journal
1. British Medical Association, http://www.bma.org.uk/http://www.bmjpg.com/
2. BMJ Publishing Group, http://www.bma.org.uk/http://www.bmjpg.com/
How can I get this right?
--
***************************
Morten Ryg
Glittreklinikken
1488 Hakadal
Norway
tel: +47 67058283
mobil: 938 53 076
fax: +47 67075344
mail: mort-ry@xxxxxxxxx
web http://home.online.no/~mort-ry/
***************************
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] RE: xsl history, Pawson, David | Thread | Re: [xsl] Reshuffling elements, Jeni Tennison |
| RE: [xsl] RE: xsl history, Pawson, David | Date | Re: [xsl] Table Row processing patt, G. Ken Holman |
| Month |