droom: Datum in Xpath

Ich habe eine XML Datei, die folgendermassen aussieht:
<mensa>
 <tag name="montag">
  <menu>Haenchen</menu>
 </tag>
 <tag name="dienstag">
  <menu>Schwein</menu>
 </tag>
  .
  .
  .
</mensa>

Ich möchte nun in meiner XSL herausbekommen, welches Datum wir heute haben und so eine HTML-Ausgabe erstellen:

<p>Heute gibt es (ergebnis vom Xpath) zu essen</p>

Das Problem: Wie kriege ich das heutige Datum mit Xpath heraus und wie könnte meine Abfrage aussehen?

Danke schon mal.

  1. Tach droom,

    Das Problem: Wie kriege ich das heutige Datum mit Xpath heraus und wie könnte meine Abfrage aussehen?

    Datumsfunktionen gibt es erst ab XPath 2.0, u. a. fn:current-date() und darauf anwendbar fn:format-date(). Letztere Funktion gibt mit der Kennung '[FNn]' und 'de'-Landeskennung den ausgeschriebenen Wochentag zurück (ggf. noch mittels fn:lower-case() in Kleinschreibung wandeln) und mit @name aus dem XML-Baum vergleichen.

    Ohne XPath 2.0 bleibt wohl nur das Übergeben des Datums bzw. Wochentages über eine andere Sprache wie JavaScript, PHP usw. (je nachdem ob client- oder serverseitig verarbeitet wird).

    Man liest sich,
    svg4you

    1. Danke, du hast Recht, ich habe es nun so gemacht:

      $xmldoc = domxml_open_file($this->xml);
      $xsldoc = domxml_xslt_stylesheet_file($this->xsl);
      $timestamp = time();
      $today = date("w",$timestamp);

      if ($today == 0) $datum = 'Sonntag';
      elseif ($today == 1) $datum = 'Montag';
      elseif ($today == 2) $datum = 'Dienstag';
      elseif ($today == 3) $datum = 'Mittwoch';
      elseif ($today == 4) $datum = 'Donnerstag';
      elseif ($today == 5) $datum = 'Freitag';
      elseif ($today == 6) $datum = 'Samstag';

      $params = array('datum' => $datum);
      $result = $xsldoc->process($xmldoc,$params);
      return $result->dump_mem();

      Es funktionniert ganz gut aber ich bekomme unformatierte Ergebnisse. Zum beispiel Feuerspieß für Feuerspieß oder Frühlingsrolle für Frühlingsrolle. Wie kann ich das ändern?

      1. Hello out there!

        if ($today == 0) $datum = 'Sonntag';
        elseif ($today == 1) $datum = 'Montag';
        elseif ($today == 2) $datum = 'Dienstag';
        elseif ($today == 3) $datum = 'Mittwoch';
        elseif ($today == 4) $datum = 'Donnerstag';
        elseif ($today == 5) $datum = 'Freitag';
        elseif ($today == 6) $datum = 'Samstag';

        Warum nutzt du dafür kein Array? (Vgl. http://de.selfhtml.org/javascript/objekte/date.htm#get_day)

        Feuerspieß für Feuerspieß oder Frühlingsrolle für Frühlingsrolle. Wie kann ich das ändern?

        In dem du UTF-8-Codiertes auch als solches behandeln lässt (richtige Zeichencodierung angeben).

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
        1. danke, ich habe es auch nun mit array() gemacht ;-)

          $xmldoc = domxml_open_file($this->xml);
          $xsldoc = domxml_xslt_stylesheet_file($this->xsl);
          $timestamp = time();
          $today = date("w",$timestamp);

          $datum = array('Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag');

          $params = array('datum' => $datum[$today]);
          $result = $xsldoc->process($xmldoc,$params);
          return $result->dump_mem();

          In meiner XSL Datei steht schon:
          <xsl:output method='xml' version='1.0' encoding='UTF-8' indent='yes'/>

          Aber in der XML Datei nicht und ich kann es auch nicht da einfügen, da die XML Datei von nem anderen Server ist und nicht von mir gehandelt ist. Habe ich da noch ne Möglichkeit?

      2. Tach droom,

        Es funktionniert ganz gut aber ich bekomme unformatierte Ergebnisse. Zum beispiel Feuerspieß für Feuerspieß oder Frühlingsrolle für Frühlingsrolle. Wie kann ich das ändern?

        Gib die Zeichenkodierung der Ausgabe entsprechend unterhalb des xsl:stylesheet-Elements an:

        <xsl:output method="..." encoding="..."/>

        Man liest sich,
        svg4you