Avatar billede wired Nybegynder
20. maj 2003 - 08:27 Der er 18 kommentarer og
1 løsning

Tabel opsætning

Jeg har følgende xml-fil:

<artikel>
  <toptxt>toptxt 1</toptxt>
  <text>text 1</text>
</artikel>
<artikel>
  <toptxt>toptxt 1</toptxt>
  <text>text 1</text>
</artikel>
...

Jeg vil gerne have følgende html resultat:

<table>
  <tr><td>toptxt 1</td><td>toptxt 2</td></tr>
  <tr><td>text 1</td><td>text 2</td></tr>
  ...
</tabel>

Hvordan gør jeg dette smartest?
(Gerne uden for-each, men med apply-templates)
Avatar billede atoft Nybegynder
20. maj 2003 - 09:12 #1
Håber dette kan bruges.

<?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" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <table>
            <tr>
                <xsl:apply-templates select="//artikel/toptext"/>
            </tr>
            <tr>
                <xsl:apply-templates select="//artikel/text"/>
            </tr>
        </table>
    </xsl:template>
    <xsl:template match="toptext">
        <td>
            <xsl:value-of select="."/>
        </td>
    </xsl:template>
    <xsl:template match="text">
        <td>
            <xsl:value-of select="."/>
        </td>
    </xsl:template>
</xsl:stylesheet>
Avatar billede atoft Nybegynder
20. maj 2003 - 09:14 #2
håber dette kan bruges

<?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" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <table>
            <tr>
                <xsl:apply-templates select="//artikel/toptext"/>
            </tr>
            <tr>
                <xsl:apply-templates select="//artikel/text"/>
            </tr>
        </table>
    </xsl:template>
    <xsl:template match="toptext">
        <td>
            <xsl:value-of select="."/>
        </td>
    </xsl:template>
    <xsl:template match="text">
        <td>
            <xsl:value-of select="."/>
        </td>
    </xsl:template>
</xsl:stylesheet>
Avatar billede atoft Nybegynder
20. maj 2003 - 09:17 #3
Begge indlæg er ens. Havde problemer med at poste :-(
Avatar billede wired Nybegynder
20. maj 2003 - 09:30 #4
Mange tak.
men ud fra dit eksempel får jeg x (antal artikeler) ens rækker, dog med x forskellige kolonner.

Jeg var heller ikke særlig præcis i mit spørgsmål.
Prøver lige at uddybe. Jeg har x antal artikler men vil gerne have det ud i følgende format:

<table>
  <tr><td>toptext1</td><td>toptext2</td></tr>
  <tr><td>text1</td><td>text2</td></tr>

  <tr><td>toptext3</td><td>toptext4</td></tr>
  <tr><td>text3</td><td>text4</td></tr>

  ...
</table>

Jeg var selv inde på samme eksempel men skal på en eller anden måde kun have de to først artikler i første række, de næste to artikler i næste række etc...
Avatar billede atoft Nybegynder
20. maj 2003 - 09:44 #5
prøv med

<?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" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
        <table>
            <xsl:apply-templates select="//artikel[position() mod 2 = 1]"></xsl:apply-templates>
        </table>
    </xsl:template>
   
    <xsl:template match="artikel">
        <tr>
            <td><xsl:value-of select="toptext"></xsl:value-of></td>
            <td><xsl:value-of select="following-sibling::artikel[1]/toptext"></td>
        </tr>
        <tr>
            <td><xsl:value-of select="text"></xsl:value-of></td>
            <td><xsl:value-of select="following-sibling::artikel[1]/text"></td>
        </tr>
    </xsl:template>
</xsl:stylesheet>
Avatar billede wired Nybegynder
20. maj 2003 - 09:46 #6
Jeg har længe forsøgt mig med noget i retning af

<xsl:if test="position()&lt;2"> .. </xsl:if>

Men ind til videre uden held.
Avatar billede atoft Nybegynder
20. maj 2003 - 09:59 #7
Har du prøvet mit eksempel?
Avatar billede wired Nybegynder
20. maj 2003 - 10:02 #8
Prøver det nu...
Tror vi trykkede "udfør" på samme tid.
Avatar billede wired Nybegynder
20. maj 2003 - 10:10 #9
Syntes at have nogle problemer med linierne:

<td><xsl:value-of select="following-sibling::artikel[1]/toptext"></td>
<td><xsl:value-of select="following-sibling::artikel[1]/text"></td>

Dit eksempel/kode virker hvis jeg fjerner disse to linier men det betyder samtidig også at jeg kun får en kolonne, og alle artikelerne kommer i x antal rækker.

Jeg skylder måske at nævne at jeg i min xml fil har en root ved navn:

<artikler> alle artiklerne </artikler>

men det skulle ikke betyde noget.
Avatar billede atoft Nybegynder
20. maj 2003 - 10:25 #10
Fejler koden eller hvad sker der?

prøv evt. med

<td><xsl:value-of select="following-sibling::toptext[1]"></td>
<td><xsl:value-of select="following-sibling::text[1]"></td>

istedet
Avatar billede wired Nybegynder
20. maj 2003 - 10:37 #11
Jeg får følgende fejl:
msxml3.dll (0x80004005)
The stylesheet does not contain a document element. The stylesheet may be empty, or it may not be a well-formed XML document.
Avatar billede atoft Nybegynder
20. maj 2003 - 10:40 #12
klart nok er mangler jo også en

/ til sidst i de to xsl:value-of'er
Avatar billede wired Nybegynder
20. maj 2003 - 10:56 #13
Excellent.... Det virker og du skal nok få point...

Men hvad gør jeg hvis jeg gerne vil skifte fra 2 kolonner til 3 kolonner.
Avatar billede atoft Nybegynder
20. maj 2003 - 11:09 #14
Det kommer til at koste extra. :-)

Du skal lave dine xsl:values om så de istedet bliver til apply templates også skal selecten på apply templaten laves om så den selecterer position() < 3

husk også at lave "mod 2" om til mod 3
Avatar billede wired Nybegynder
20. maj 2003 - 11:25 #15
thx :-)
Avatar billede wired Nybegynder
20. maj 2003 - 11:25 #16
PS: Hvor har du informationen om following-sibling syntes ikke at kunne finde den i de bøger jeg har
Avatar billede atoft Nybegynder
20. maj 2003 - 11:27 #17
Dette er nok den bedste reference jeg set endnu.

http://www.zvon.org/xxl/XSLTreference/Output/index.html
Avatar billede wired Nybegynder
20. maj 2003 - 11:28 #18
thx og så skal jeg nok holde :-)
Avatar billede atoft Nybegynder
20. maj 2003 - 11:29 #19
Så lærer man jo ingenting :-o
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