Avatar billede raos Nybegynder
27. april 2004 - 22:14 Der er 3 kommentarer og
1 løsning

Lave tabel ud fra xml

Hej Eksperter,

Hvordan får jeg, via xslt, følgende xml til at blive til en tabel som vist nederst?

sample XML:
--------------------------------------
<?xml version="1.0" encoding="UTF-8" ?>
<dataroot>
    <Car>
        <Id>1</Id>
        <Name>Toyota</Name>
        <Color>red</Color>
    </Car>
    <Car>
        <Id>2</Id>
        <Name>Opel</Name>
        <Color>blue</Color>
    </Car>
    <Car>
        <Id>3</Id>
        <Name>Honda</Name>
        <Color>red</Color>
    </Car>
    <Car>
        <Id>4</Id>
        <Name>Ford</Name>
        <Color>pink</Color>
    </Car>
    <Car>
        <Id>5</Id>
        <Name>Skoda</Name>
        <Color>yellow</Color>
    </Car>
</dataroot>
----------------------------------

Ønsket tabel:
HTML:
----------------------------------

<TABLE BORDER="1">
    <TR>
        <TD>Ford - pink</TD>
        <TD>Honda - red</TD>
        <TD>Opel - blue</TD>
    </TR>
    <TR>
        <TD>Skoda - yellow</TD>
        <TD>Toyota - red</TD>
        <TD>&nbsp;</TD>
    </TR>
</TABLE>
----------------------------------

HTML tabellen skal have 3 biler i hver række - og så mange rækker der er nødvendigt.

Der ud over skal bil mærkerne også sorteres alfabetisk efter Name


På forhånd tak
Avatar billede nute Nybegynder
28. april 2004 - 11:04 #1
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:variable name="vCells">3</xsl:variable>
    <xsl:template match="/">
        <xsl:apply-templates/>
    </xsl:template>
    <xsl:template match="dataroot">
        <table>
            <xsl:apply-templates>
                <xsl:sort select="Name" data-type="text" order="ascending"/>
            </xsl:apply-templates>
        </table>
    </xsl:template>
    <xsl:template match="Car">
        <xsl:variable name="vCellCount">
            <xsl:value-of select="position() mod $vCells"/>
        </xsl:variable>
        <xsl:if test="position() = 1 or ( $vCellCount = 1 )">
            <xsl:text disable-output-escaping="yes"><![CDATA[<tr>]]></xsl:text>
        </xsl:if>
        <td>
            <xsl:value-of select="Name"/> - <xsl:value-of select="Color"/>
        </td>
        <xsl:if test="position() = last() and ( $vCellCount != 0 )">
            <xsl:call-template name="buildEmptyCells">
                <xsl:with-param name="pCount">
                    <xsl:value-of select="$vCellCount"/>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:if>
        <xsl:if test="position() = last() or ( $vCellCount = 0 )">
            <xsl:text disable-output-escaping="yes"><![CDATA[</tr>]]></xsl:text>
        </xsl:if>
    </xsl:template>
    <xsl:template name="buildEmptyCells">
        <xsl:param name="pCount"/>
        <xsl:if test="$pCount &lt; $vCells">
            <td/>
            <xsl:call-template name="buildEmptyCells">
                <xsl:with-param name="pCount">
                    <xsl:value-of select="$pCount + 1"/>
                </xsl:with-param>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>
Avatar billede raos Nybegynder
29. april 2004 - 19:55 #2
Tak for det gode eksempel - det var lige det jeg skulle bruge...
Avatar billede nute Nybegynder
29. april 2004 - 19:57 #3
fino :o]
Avatar billede nute Nybegynder
29. april 2004 - 21:07 #4
- takker -
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester