Avatar billede gedebuk Nybegynder
01. december 2003 - 15:12 Der er 7 kommentarer og
1 løsning

XSL i flere kolonner

Hejsa der!

I en XML-fil har jeg nogle elementer, hvis indhold skal vises i hver sin kolonne. Jeg kan dog ikke finde ud af at få vist indholdet fra to XML-elementer i samme HTML-række.



HTML-tabellen skal gerne se sådan ud:

  Emne 1      tal1 fra emne 1        tal2 fra emne 1
  Emne 2      tal1 fra emne 2        tal2 fra emne 2



Indholdet af XML-filen:

<emner>

  <emne id="1">
    <tal1>
    <tal2>
  </emne>

  <emne id="2">
    <tal1>
    <tal2>
  </emne>

</emner>

På forhånd tak,
Mads
Avatar billede Slettet bruger
01. december 2003 - 21:57 #1
Mon ikke disse templates kan gøre det?

<xsl:template match="emner">
  <table>
      <xsl:apply-templates />
  </table>
</xsl:template>

<xsl:template match="emne">
  <tr>
    <th>Emne <xsl:value-of select="@id" /></th>
    <xsl:apply-templates />
  </tr>
</xsl:template>

<xsl:template match="tal1 | tal2">
  <td><xsl:value-of select="." /></td>
</xsl:template>

/CS
Avatar billede gedebuk Nybegynder
02. december 2003 - 14:36 #2
Hmmm, jeg kan ikke rigtigt få det til at virke... Sikkert pga. min begrænsede viden om templates.

Jeg får kun udskrevet overskrift og én linje derudover:
Emner (overskrift)
Emne


Indholdet af XML-filen:

<?xml version="1.0" encoding="iso-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>

<emner>

  <emne id="1">
    <tal1>11</tal1>
    <tal2>12</tal2>
  </emne>

  <emne id="2">
    <tal1>21</tal1>
    <tal2>22</tal2>
  </emne>

</emner>


Indholdet af XSL-filen:

<?xml version="1.0" encoding="iso-8859-1" ?>

<html>
  <head>
    <title>Emner</title>
  </head>
  <body>

    <h1>Emner</h1>

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

      <xsl:template match="emner">
        <table>
          <xsl:apply-templates />
        </table>
      </xsl:template>

      <xsl:template match="emne">
        <tr>
          <th>Emne <xsl:value-of select="@id" /></th>
          <xsl:apply-templates />
        </tr>
      </xsl:template>

      <xsl:template match="tal1 | tal2">
        <td><xsl:value-of select="." /></td>
      </xsl:template>

    </xsl:stylesheet>

  </body>
</html>

Mvh. Mads
Avatar billede trolle Nybegynder
02. december 2003 - 18:47 #3
hmm skal det ikke vaere <td> istedet for <th>  ??
   
<tr>
  <td>Emne <xsl:value-of select="@id" /></td>
  <xsl:apply-templates />
</tr>
Avatar billede gedebuk Nybegynder
02. december 2003 - 20:16 #4
Hejsa.
Det gør tilsyneladende ingen forskel med <td> i stedet for <th>
Avatar billede trolle Nybegynder
02. december 2003 - 21:39 #5
heh en ting der mangler er vidst skraastregen i match'en af emner, alstaa
<xsl:template match="/emner">
og ikke:
<xsl:template match="emner">
Avatar billede Slettet bruger
02. december 2003 - 22:02 #6
Okay - grunden til at du kun fik templates, var at jeg jo ikke vidste om du havde andre ting i XML eller stylesheet - disse templates ville virke, hvis man ikke lige (som du skrev) havde "begrænset viden" herom. Man skal naturligvis vide hvordan man benytter dem.

<td> er "table data", hvor <th> er en "table header", dvs. en celle der fungerer som overskrift for en hel række/kolonne.

>>> trolle: Såsnart man lægger skråstregen foran elementet ("/emner") fungerer template'en KUN hvis "emner" er det yderste element i XML - når man evt. senere laver om i XML formatet vil den ikke længere matche.

Her er et komplet styleheet der burde virke:

<?xml version="1.0" encoding="iso-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <head>
      <title>Emner</title>
  </head>
  <body>
      <xsl:apply-templates />
  </body>
  </html>
</xsl:template>

<xsl:template match="emner">
  <table>
      <caption>Emner</caption>
      <xsl:apply-templates />
  </table>
</xsl:template>

<xsl:template match="emne">
  <tr>
      <th>Emne <xsl:value-of select="@id" /></th>
      <xsl:apply-templates />
  </tr>
</xsl:template>

<xsl:template match="tal1 | tal2">
  <td><xsl:value-of select="." /></td>
</xsl:template>

</xsl:stylesheet>


/CS
Avatar billede trolle Nybegynder
02. december 2003 - 22:30 #7
herligt.... tak, det forklarer hvorfor alle eksempler man ser matcher paa roden / og derefter templates for elementer... det vil gangske rigtigt vaere lettere at udvide eller bruge paa flere lignene xml sheets
Avatar billede gedebuk Nybegynder
02. december 2003 - 22:44 #8
It works!

Jeg siger tak for hjælpen :o)

- Mads
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