Announcement

Collapse
No announcement yet.

XML zu Html mit Tabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XML zu Html mit Tabelle

    Hallo,

    ich habe eine XML Datei mit TV-Programmdaten die so aussieht:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="xsldatei.xsl"?>
    <TVWeek Year="2009" Month="9" Week="5" Begin_Date="2009-09-28T06:00:00" End_Date="2009-10-05T05:59:59">
       <TVDay Day="28.09.2009" DayName="Montag">
          <TVTime Time="6:00" RealDate="28.09.2009">
             <Note>"Sendungsnahme"</Note>
    
          </TVTime>
    
          <TVTime Time="6:01" RealDate="28.09.2009">
             <Note>"Sendungsnahme"</Note>
    
          </TVTime>
    
          <TVTime Time="7:00" RealDate="28.09.2009">
             <Note>"Sendungsnahme"</Note>
    
           
          </TVTime>
    
          <TVTime Time="7:01" RealDate="28.09.2009">
             <Note>"Sendungsnahme"</Note>
    
           
          </TVTime>
    
       </TVDay>
       <TVDay Day="29.09.2009" DayName="Dienstag">
          <TVTime Time="6:00" RealDate="29.09.2009">
             <Note>"Sendungsnahme"</Note>
    
          </TVTime>
    
          <TVTime Time="6:01" RealDate="29.09.2009">
             <Note>"Sendungsnahme"</Note>
    
          </TVTime>
    
          <TVTime Time="7:00" RealDate="29.09.2009">
             <Note>"Sendungsnahme"</Note>
    
           
          </TVTime>
    
          <TVTime Time="7:01" RealDate="29.09.2009">
             <Note>"Sendungsnahme"</Note>
    
           
          </TVTime>
    
       </TVDay>
     </TVWeek>
    Ich habe also Wochentage mit darunterliegenden Zeiten.

    Ich möchte nun das ganze in einer Tabelle ausgeben.

    Und habe die dazugehörige xsl Datei geschrieben:

    HTML Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:template match="/">
          <html>
             <body>
                <h2>Titel</h2>
    
                <table border="1">
                   <tr>
                      <xsl:for-each select="TVWeek/TVDay">
                         <th>
                            <xsl:value-of select="@Day" />
    
                            <br />
    
                            <xsl:value-of select="@DayName" />
                         </th>
                      </xsl:for-each>
                   </tr>
    
                   <xsl:for-each select="TVWeek/TVDay/TVTime">
                      <tr>
                         <td>
                         <xsl:value-of select="@Time" />
    
                          
                         <xsl:value-of select="Note" />
    					 
                         </td>
                      </tr>
                
                   </xsl:for-each>
                  
                </table>
             </body>
          </html>
       </xsl:template>
    </xsl:stylesheet>
    Bei der Ausgabe kommt sowas raus:


    (Die komischen Zeichen in der Tabelle nicht beachten ist bei der Zeichenkodierung was falsch eingestellt)

    Ich will aber das unter jedem Tag auch nur die Zeiten von diesem Tag stehen!

    Bei mir verteilt er die Tage richtig als Überschriften in der Tabelle.
    Die Zeiten aber werden einfach alle in eine Spalte geschrieben!

    Er müsste doch das for-each nur für einen Tag machen und dann von vorne
    beginnen damit ich alle 5 Tage in 5 Spalten habe!

    Kann mir da einer helfen?

  • #2
    Verwende für die Daten eine weitere Tabelle oder eine Liste, siehe diesen Ansatz:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="/">
        <html>
          <head>
            <title>Test</title>
            <style type="text/css">
              table,tr,th,td
              {
                border: 1px solid #00C;
                border-collapse: collapse;
              }
    
              ul
              {
                margin: 0;
                list-style-type: none;
              }
              
              li
              {
                border-bottom: 1px solid #00C;
              }
              
              li.last
              {
                border-bottom: none;
              }
            </style>
          </head>
          <body>
            <h1>Titel</h1>
            <table>
              <tr>
                <xsl:for-each select="TVWeek/TVDay">
                  <th><xsl:value-of select="@Day"/><br /><xsl:value-of select="@DayName"/></th>
                </xsl:for-each>
              </tr>
              <tr>
                <xsl:for-each select="TVWeek/TVDay">
                  <td>
                    <ul>
                      <xsl:for-each select="TVTime">
                        <li>
                          <xsl:if test="position()=last()">
                            <xsl:attribute name="class">last</xsl:attribute>
                          </xsl:if>
                          <xsl:value-of select="@Time"/> | <xsl:value-of select="Note"/>                      
                        </li>
                      </xsl:for-each>
                    </ul>
                  </td>
                </xsl:for-each>
              </tr>
            </table>
          </body>
        </html>
      </xsl:template>
    </xsl:stylesheet>

    Comment


    • #3
      Danke für die schnelle Antwort!

      Es funktioniert wunderbar!!

      Comment

      Working...
      X