Anton Peissinger: XML und JavaScript

Servus zusammen.

Ich hab da volgendes Problem...

Wie kann ich eine Variable, die ich mittels
JavaScript belegt habe (Rückgabewert einer Funktion, usw.)
in XSLT wieder verwenden?

Vielleicht konkreter:

In XSLT gibts jede Menge Tags,
wie z.B. xsl:variable, mit der ich mir im Stylesheet
eine neue Variable definieren kann.
Wie kann ich nun dieser Variable den Inhalt der
JavaScript-Variablen zuweisen?

Vielleicht fällt Euch was dazu ein.

Vielen Dank im Voraus

Anton

  1. Hallo!

    In XSLT gibts jede Menge Tags,
    wie z.B. xsl:variable, mit der ich mir im Stylesheet
    eine neue Variable definieren kann.
    Wie kann ich nun dieser Variable den Inhalt der
    JavaScript-Variablen zuweisen?

    <xsl:variable name="n" select="2"/>
    ...
    <xsl:value-of select="item[$n]"/>

    oder so:

    <xsl:variable name="n">2</xsl:variable>
    ...
    <xsl:value-of select="item[position()=$n]"/>

    Da ich nicht genau weiss was du möchtest kann ich folgendes "anbieten":

    http://msdn.microsoft.com/xml/xslguide/script-eval.asp
    und
    http://msdn.microsoft.com/xml/xslguide/script-expr.asp

    Hoffe das ist das was du suchst.

    Grüße
    Thomas

    1. <xsl:variable name="n" select="2"/>
      ...
      <xsl:value-of select="item[$n]"/>

      oder so:

      <xsl:variable name="n">2</xsl:variable>
      ...
      <xsl:value-of select="item[position()=$n]"/>

      Da ich nicht genau weiss was du möchtest kann ich folgendes "anbieten":

      http://msdn.microsoft.com/xml/xslguide/script-eval.asp
      und
      http://msdn.microsoft.com/xml/xslguide/script-expr.asp

      Hoffe das ist das was du suchst.

      Grüße
      Thomas

      Irgendwie ist das nicht so das richtige:

      Ich versuchs mal so:
      Ich hab z.B. folgendes Stylesteet:

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

      <xsl:template match="/">

      <html>
      <head>.....<head>

      <body>
      <form action="..." ...>(nicht so wichtig)
        <input type="hidden" name="xx" value="{return();}"/>
      </form>
      </body>

      </html>

      </xsl:template>

      </xsl:stylesheet>

      Wo muss ich nun die JavaScript-Funktion definieren, damit sie auch
      ausgewertet wird?

      1. Ganz am Anfang des Stylesheets (also nach <?...?>)
      2. Nach xsl:template...
      3. Im Header der danach vorliegenden HTML-Datei
      4. Direkt vorm Aufruf
      5. An anderer Stelle

      Oder geht das vielleicht gar nicht?

      Vielleicht habt Ihr eine Idee, wie man das Problem lösen könnte.

      In diesem Sinne
      Anton

      1. Hi Anton,

        also erst mal: die Funktion schreibst Du in Deinem Template dort, wo Du sie in einer HTML-Datei auch unterbringen würdest (vermutlich also im Head). Falls es damit zu Ärger kommt (hab's selber noch nicht probiert), könntest Du 'nen CDATA-Bereich draus machen müssen.

        An Deinem Code fällt mir aber besonders auf:

        <input type="hidden" name="xx" value="{return();}"/>

        ^^^^^^^^^^^

        Was soll'n das sein? Das ist entweder ne JS-Syntax, die mir bislang völlig unbekannt blieb, oder aber eben einfach falsch.

        Vorschlag: Schreib erst 'ne HTML-Seite, wenn die funktioniert, kannst Du einfach dort, wo Daten aus 'ner XML-Datei sein sollen, Deine XSL-Anweisungen notieren und so daraus 'ne XSL-Datei machen.

        Grüße,

        Utz

        1. An Deinem Code fällt mir aber besonders auf:

          <input type="hidden" name="xx" value="{return();}"/>
                                                     ^^^^^^^^^^^
          Grüße,

          Utz

          Servus.

          Die Syntax mit den geschweiften Klammern ist laut
          Doku des Oracle XSQL-Servlets durchaus richtig und
          der Browser (IE5) meckert zwar, aber nur insofern, da er die
          Definition der Funktion return() (in diesem Fall)
          nicht finden kann.
          Allerdings hat sich das Problem jetzt anderweitig gelöst.

          Ich definiere mir jetzt einfach im HTML-Frameset Variablen,
          über die ich dann mittels "top.variable" drauf zugreifen
          werde.
          Die XML-Seiten werden nämlich in einem Frameset
          angezeigt.
          Das ist meiner Meinung eine einfachere Lösung.
          Hätte vielleicht schon früher draufkommen können.

          Drotzdem vielen Dank für die Mühe

          Anton