Anzeige:
Ergebnis 1 bis 4 von 4

Thema: xsl schleifen

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212

    xsl schleifen

    so konnte ja hier schon das ein oder andere problem löse nun ist es so, das ich mein xml file in dem vormat habe, wie ich es mir vorstelle.
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <kalender>
      <jahr>
        <monat>
          <person>
            <name>Wolf</name>
            <dg>noch leer </dg>
            <termin datum="2010-02-02">
            </termin>
            <termin datum="2010-02-04">
            </termin>
            <termin datum="2010-02-07">
            </termin>
            <termin datum="2010-02-09">
            </termin>
          </person>
          <person>
            <name>Mustermann</name>
            <dg>noch leer </dg>
            <termin datum="2010-02-09">
            </termin>
          </person>
        </monat>
      </jahr>
    </kalender>
    nun soll das ganz ja auch entsprechen aufbereitet werden, in meinem fall halt mit xsl, mit
    Code:
    <xsl:template match="termin">
    kann ich das ganze ja auch anzeigen lassen, aber da es ja wie ein kalender werden soll will ich mir dann ja auch die freien tage anzeigen lassen, aber in der o.g. schleife werden ja nur alle hintereinander angezeigt. aber es kann ja auch nicht lösung sein, das ich jede spalte angebe und bei übereinstimmung erst befülle, ich würde das ganze gerne in einer schleife lösen.
    ich hatte auch schon überlegt das xml file auch mit leeren einträgen zu befüllen, aber dann hab ich ja sinnlose datensätze die ich nicht benötige.
    wie kann ich das problem lösen?

    thx cu SHB

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Du brauchst keine Schleife, verwende xsl:key auf das Attribute datum.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.05.2004
    Beiträge
    212
    nein, ich glaube ich habe mich falsch ausgedrückt.
    ich möchte eine tabelle mit den werten aus dem xml file haben, die tabelle soll zwischen 28 und 31 spalten haben, je nachdem wie lang der monat ist. die daten sollen dann entsprechend in dem tag angezeigt werden. Aber wie kriege ich das mit xsl so eine dynamische schleife hin? mit php würde ich so in der richtung lösen
    Code:
    for($i=1;$i<=$monat_dauer;$i++){
    echo "<td>Inhalt</td>";
     }
    aber das geht mit xsl wohl nicht so.

    cu SHB

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Garnicht, XSLT ist ein Prozeduraler Transformator.
    Etwas klarer ausgedrückt: Ein Leistungsfähiger XML Umwandler.
    Wenn du dem XSLT Prozessor also nicht passend fütterst wird das nichts geben. Es gibt zwar etliche Extension wie z.B: date und string aber das sind reine Konverter Erweiterungen.
    Du hast aber die möglichkeit deinen Kalender im XML mit einzubauen oder du ziehst es bei PHP mit den EXSLT Object Model rein.
    Ein simples Beispiel (nicht getestet)
    PHP-Code:
    <?php

    function thisMonth()
    {
      
    $dom = new DomDocument'1.0''utf-8' );
      
    $dom->formatOutput true;
      
    $month $dom->createElement"month" );
      
    $dom->appendChild$month );
      
    $days range1date('t') );
      foreach ( 
    range034 ) AS $d )
      {
        if ( 
    $d == )
          
    $week $dom->createElement"week" );

        
    $d in_array$d$days ) ? $d " ";
        
    $week->appendChild$dom->createElement"day"$d ) );

        if ( 
    $d == )
          
    $month->appendChild$week );
      }
      return 
    $dom;
    }

    function 
    Template()
    {
       global 
    $connection;

       
    $dom = new DomDocument'1.0''utf-8' );
       
    $dom->load"index.xml" );

       
    $stylesheet = new DomDocument'1.0''utf-8' );
       
    $stylesheet->load('index.xslt');

       
    $xsl = new XSLTProcessor;
       
    $xsl->registerPHPFunctions();
       
    $xsl->importStyleSheet$stylesheet );

       return 
    $xsl->transformToXML$dom );
    }

    header"Content-Type: text/html; charset=utf-8" );
    echo 
    Template();
    ?>
    Achte bei dem Beispiel vor allem auf die Stylesheet Definition.
    HTML-Code:
    <?xml version = '1.0' encoding = 'utf-8' ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:date="http://exslt.org/dates-and-times"
      xmlns:php="http://php.net/xsl"
      xmlns:exsl="http://exslt.org/common"
      extension-element-prefixes="date php exsl">
    
    <xsl:output version="1.0"
      method="xml"
      encoding="utf-8"
      indent="yes"
      media-type="application/xhtml+xml"
      doctype-system = "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
      doctype-public = "-//W3C//DTD XHTML 1.0 Strict//EN"
    />
    
    <xsl:key name="termine" match="termin" use="@datum" />
    
    <xsl:template name="kalender">
    <xsl:if test="exsl:object-type(php:function('thisMonth')) = 'node-set'">
      <table summary="Cal" border="1">
        <xsl:for-each select="exsl:node-set(php:function('thisMonth'))/month/week">
          <tr>
            <xsl:for-each select="./day">
              <td>
                <xsl:if test="date:day-of-week-in-month() = .">
                  <xsl:attribute name="style">
                    <xsl:text>color:red;</xsl:text>
                  </xsl:attribute>
                </xsl:if>
                <xsl:value-of select="." />
              </td>
            </xsl:for-each>
          </tr>
        </xsl:for-each>
      </table>
    </xsl:if>
    </xsl:template>
    
    <xsl:template match="/">
    <head>
       <title><xsl:text>Kalender</xsl:text></title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
       <link rel="stylesheet" type="text/css" href="index.css" media="all" />
    </head>
    <body>
      <div>
        <p>Kalender</p>
        <xsl:call-template name="kalender" />
      </div>
    </body>
    </xsl:template>
    
    </xsl:stylesheet>
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •