dey: variable java

Moin moin.

Ich versuche eine Variable von Java nach XSL zu übergeben:

<script type="text/javascript">
<!--
    var java=1;

//-->
<xsl:if test="$java=1">
  <xsl:value-select....

So oder so ähnlich.
Ich habe etwas ähnliches schon mit XSL altes format (vor 99) und VBS halbwegs erfolgreich über
<xsl: when expr"$vbs=1">....
versucht.

Kann mir jemand helfen??

bydey

  1. Hallo,

    Ich versuche eine Variable von Java nach XSL zu übergeben:

    <script type="text/javascript">
    <!--
        var java=1;

    //-->
    <xsl:if test="$java=1">
      <xsl:value-select....

    So oder so ähnlich.
    Ich habe etwas ähnliches schon mit XSL altes format (vor 99) und VBS halbwegs erfolgreich über
    <xsl: when expr"$vbs=1">....
    versucht.

    Ich gehe mal davon aus, dass hier der IE bzw. MSXML im Spiel sind.

    Alter Ansatz mit den proprietaeren Elementen xsl:script und xsl:eval: http://www.styleassistant.de/tips/tip29.htm

    Neuer Ansatz in dieser Art: http://forum.de.selfhtml.org/archiv/2002/8/20401/#m114310.

    MfG, Thomas

    1. Euch beiden. Jetzt muß ich erst mal damit rumspielen!!

      bydey

    2. Hallo Thomas.
      Wenn ich die die Informationen richtig interpretiere gehen die Lösungen mehr in Richtung die Datan von XSL nach Java zu transportieren, "xslinput".
      Die letzte Frage von Anarchy lautet: "Das geht wenn man die einfach im gleichen verzeichniss hat - das heißt ich brauche nur noch "zahl" irgendwie nach XSL zu befördern ..."
      Und genau da steh ich jetzt ja auch!!
      Hast Du noch nen Tip?

      bydey

      1. Hallo,

        Die letzte Frage von Anarchy lautet: "Das geht wenn man die einfach im gleichen verzeichniss hat - das heißt ich brauche nur noch "zahl" irgendwie nach XSL zu befördern ..."
        Und genau da steh ich jetzt ja auch!!

        Entweder xsl:include verwenden und im eingebundenen Stylesheet die Variable definieren oder eben ueber das MSXML-DOM einbinden (wie dort gezeigt).

        MfG, Thomas

        1. Hallo Thomas.
          Erstmal Danke für Deine Hilfe.
          Kannst Du mir noch ein Beispiel für den xsl:include Befehl geben. Der findet sich nämlich nicht im Selfhtml/xsl area.

          bydey

          1. Hallo,

            Kannst Du mir noch ein Beispiel für den xsl:include Befehl geben. Der findet sich nämlich nicht im Selfhtml/xsl area.

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

            <xsl:include href="abc.xsl" />

            <!-- $xyz steht zur Verfuegung -->

            </xsl:stylesheet>

            abc.xsl:

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

            Im Gegensatz zu xsl:import haben per xsl:include eingebundene Teile dieselbe Prioritaet wie der Inhalt des Eltern-Stylesheets.

            MfG, Thomas

            1. Hi.
              Entschuldige meine Kurzsichtigkeit, aber ich sehe den Zusammenhang mit Java noch nicht. In dem Beispiel includest Du eine in XSL per XSL erzeugte Variable.

              <!-- $xyz steht zur Verfuegung -->
                <xsl:variable name="xyz">0815</xsl:variable>

              Mir ist nicht klar, wie das auf meine im ersten XSL erzeugte Java-Variable anwenden kann??

              bydey

              1. Hallo,

                Entschuldige meine Kurzsichtigkeit, aber ich sehe den Zusammenhang mit Java noch nicht. In dem Beispiel includest Du eine in XSL per XSL erzeugte Variable.

                Du wolltest doch ein Beispiel fuer xsl:include ... So klappt das uebrigens auch Server-seitig mit der Variablenuebergabe.

                Mir ist nicht klar, wie das auf meine im ersten XSL erzeugte Java-Variable anwenden kann??

                Dann wieder zum Anfang zurueck:
                Deklariere die JS-Variable und instanziiere ActiveX-Objekte fuer die XML- und die XSL-Datei. Uebergib die JS-Variable ueber das DOM an das XSL-Objekt und fuehre die Transformation aus. Dazu hatte ich auf das Beispiel aus dem anderen Thread verwiesen.

                Stelle mal etwas mehr Code online.

                MfG, Thomas

                1. Hallo,

                  Dann wieder zum Anfang zurueck:
                  Deklariere die JS-Variable und instanziiere ActiveX-Objekte fuer die XML- und die XSL-Datei. Uebergib die JS-Variable ueber das DOM an das XSL-Objekt und fuehre die Transformation aus. Dazu hatte ich auf das Beispiel aus dem anderen Thread verwiesen.

                  Hier mal ein Beispiel auf der Basis des genannten Codes. test.htm hat einen JS-Block mit der Variable xyz. test.xml und test.xsl werden jeweils in ActiveX-Objekte ueberfuehrt. Der Wert von xyz wird an das erste xsl:variable-Element in test.xsl uebergeben (dort als "Dummy" mit "..." vorhanden) und danach wird die Transformation ausgefuehrt und erst der Inhalt von wurzel/test ausgegeben und dann auf $xyz=1 geprueft und im Erfolgsfall die "Hurra!"-Meldung ausgegeben.

                  test.xml

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

                  <wurzel>
                    <test>Hallo Welt!</test>
                  </wurzel>

                  test.xsl

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

                  <xsl:output
                      method="html"
                      doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
                      doctype-system="http://www.w3.org/TR/html401/loose.dtd"
                      encoding="ISO-8859-1"
                      version="4.01"
                      media-type="text/html"
                      indent="yes"
                  />

                  <xsl:variable name="xyz">...</xsl:variable>

                  <xsl:template match="/">

                  <html>
                  <head>
                  <title>Test by TM 08/02</title>
                  </head>
                  <body>

                  <xsl:value-of select="wurzel/test" /><br />

                  <xsl:if test="$xyz=1">
                    xsl:textHurra! $xyz hat den Wert </xsl:text><xsl:value-of select="$xyz" />
                  </xsl:if>

                  </body>
                  </html>

                  </xsl:template>
                  </xsl:stylesheet>

                  test.htm

                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                  <html>
                  <head>
                  <title>Test by TM 08/02</title>
                  <script language="JavaScript" type="text/javascript">
                  <!--

                  function Test()
                  {
                  var xyz=1, xmlinput, xslinput, obj, htmloutput;

                  xmlinput=new ActiveXObject("MSXML2.DOMDocument.3.0");
                  xmlinput.async=false;
                  xmlinput.load("test.xml");

                  xslinput=new ActiveXObject("MSXML2.DOMDocument.3.0");
                  xslinput.async=false;
                  xslinput.load("test.xsl");

                  obj=xslinput.documentElement.getElementsByTagName("xsl:variable");
                  obj[0].firstChild.nodeValue=xyz;

                  htmloutput=xmlinput.transformNode(xslinput.documentElement);
                  document.getElementsByTagName("body")[0].innerHTML=htmloutput;
                  }
                  //-->
                  </script>
                  </head>
                  <body onload="Test()">

                  </body>
                  </html>

                  Ergebnis:

                  Hallo Welt!
                  Hurra! $xyz hat den Wert 1

                  MfG, Thomas

                2. <body>
                  <script language="Javascript" type="text/javascript">
                      var java=1;
                  </script>

                  ....die Variable will ich über window.prompt oder ähnliches mit einem Wert versehen. Danach will ich das applay templates je nach Wert meiner Variable java filtern
                  ....

                  xsl:choose
                  <xsl:when test="$java=1">

                  <xsl:if test="FeederReportUnit/Unit[substring-before(fsSetPos,'-')= 1]">
                  <tr><td colspan="2">Module No.1</td><td></td></tr>
                  <xsl:apply-templates select="FeederReportUnit/Unit[substring-before(fsSetPos,'-')= 1]"/>
                  </xsl:if>
                  </xsl:when>
                  xsl:otherwiseusw
                  Dazu muß ich die Variable aus dem Javascript irgenwie in eine xsl:..- Anweisung reinkriegen.

                  bydey

                  1. Hallo,

                    Dazu muß ich die Variable aus dem Javascript irgenwie in eine xsl:..- Anweisung reinkriegen.

                    Wenn die ersten beiden Zeilen der Funktion Test() in meiner test.htm so aussehen

                    var xyz, xmlinput, xslinput, obj, htmloutput;

                    xyz=window.prompt("Bitte Wert eingeben:","");

                    erscheint die Abfrage und bei "1" erscheint das Ergebnis aus xsl:if.

                    MfG, Thomas

                    1. Hi.
                      Ich glaub so langsam hab ichs kapiert. Mächtig kompliziert!!!!
                      Mein Problem in diesem Fall ist:
                      1.  Es spielt sich alles lokal ab.
                      2. HTML/XML/XSL wird dazu genutzt aus einer DB Daten darzustellen.
                      3. HTML und XML werden automatisch per Apllication erzeugt und sind unveränderlich
                      4. In der HTML sind die Pfade für XML und XSL unveränderlich verlinkt
                      5. Ich kann ausschliesslich in der XSL rumspielen, um das Designund den Inhalt der Reports zu beeinflussen.

                      Ergo:
                      Mein JS mit variable und window.prompt und die Übernahme der JS-Variable in XSL-Kommandos kann ausschliesslich dieser XSL-Datei stattfinden. Ist das möglich?

                      bydey

                      1. hallo,

                        Ich glaub so langsam hab ichs kapiert. Mächtig kompliziert!!!!
                        Mein Problem in diesem Fall ist:
                        1.  Es spielt sich alles lokal ab.
                        2. HTML/XML/XSL wird dazu genutzt aus einer DB Daten darzustellen.
                        3. HTML und XML werden automatisch per Apllication erzeugt und sind unveränderlich
                        4. In der HTML sind die Pfade für XML und XSL unveränderlich verlinkt
                        5. Ich kann ausschliesslich in der XSL rumspielen, um das Designund den Inhalt der Reports zu beeinflussen.

                        Ergo:
                        Mein JS mit variable und window.prompt und die Übernahme der JS-Variable in XSL-Kommandos kann ausschliesslich dieser XSL-Datei stattfinden. Ist das möglich?

                        ich verstehe so allmählich was du tun möchtest.
                        jedoch: was hat hier html zu suchen? sie sollte erst als ergebniss der transformation in erscheinung treten.
                        wie sind die pfade in der html verlinkt?

                        das problem was du hast ist, dass wenn du javascript die in einer xsl datei steht ausführst bist du bereits in html, die transformation ist also abgeschlossen.
                        mit dem beispiel, das thomas dir geschrieben hat hast du beim IE die möglichkeit variablen noch vorm ende der transformation zu übergeben.

                        ich weiss auch nicht wie und was die xml/xsl transformation bei dir macht. aber eine andere möglichkeit wäre, wenn du die möglichkeit hast parameters in der URL anzugeben und abzufragen.
                        das könntest du auch mit javascript/formular prompt machen und es könnte so aussehen:

                        javascript/formular promp --> "bitte tippen Sie eine zahl ein"
                        user --> 1
                        kick auf ok/senden --> du übergibst dann das eingegebene als wert des varaiblen und rufst eine seite damit auf wo die url dann z.B. so aussieht:
                        http://blabla.de/seite.xml?java=1
                        diese variable kannst du in deinem xsl-sheet abfragen.

                        wie gesagt, das hängt aber davon ab wie bei dir die serverseitge transformation funktioniert und welche möglichkeiten dir die parser zur verfügung stellen.

                        grüße
                        thomas

              2. hallo,

                Entschuldige meine Kurzsichtigkeit, aber ich sehe den Zusammenhang mit Java noch nicht.

                weil da es keine gibt: bitte! javascript _ist nicht_ java!

                Mir ist nicht klar, wie das auf meine im ersten XSL erzeugte Java-Variable anwenden kann??

                <script type="text/javascript">
                <![CDATA[
                viel bla bla bla in javasript ....
                ]]>
                <xsl:variable name="myVar">var java=1;</xsl:variable>
                <![CDATA[
                weitere bla bla bla in javascript ...
                ]]>

                <xsl:if test="contains($myVar, 'java=1')">
                  <xsl:value-select....

                mir ist aber nicht so ganz klar was du beabsichtigst, also weiss ich auch nicht ob das so funktioniert wie du es brauchst.

                grüße
                thomas

                1. Servus Thomas.
                  Das sieht echt gut aus. Ich denke, wenn kapiere, was es mit dem CDATA auf sich hat komme ich damit weiter. Danke. Bis auf weiteres.
                  bydey

                  1. hallo,

                    Das sieht echt gut aus. Ich denke, wenn kapiere, was es mit dem CDATA auf sich hat komme ich damit weiter. Danke. Bis auf weiteres.

                    innerhalb von CDATA kannst du alles mögliche schreiben, das wird vom parser nicht geparst, man braucht in javascript &, <, > etc. etc. die sonst fehlermeldungen produzieren würden.

                    grüße
                    thomas

                2. Servus Thomas.
                  Ich werde NIE WIEDER java und javascript verwechseln: von kavascript hab ich kein plan und von java versteh ich gleich mal ganz und gar nichts!!!!!!
                  Nach durchsehen Deines Vorschlags habe ich festgestellt, daß der Inhalt der Variable myvar statisch ist und dem Text java=1 entspricht.
                  <xsl:variable name="myVar">var java=1;</xsl:variable>

                  Ich versuche aber den Inhalt der Variable "java" aus javascript in XSL zu übernehmen

                  Es sollte eher so aussehen oder funktionieren:

                  <script language="Javascript" type="text/javascript">
                      var java=1;
                  </script>

                  <xsl:if test="$java=1">.....

                  Hast Du eine Idee?

                  1. Hallo,

                    Ich versuche aber den Inhalt der Variable "java" aus javascript in XSL zu übernehmen

                    Ich habe meinen Beispielcode mal hier abgelegt: http://www.datenverdrahten.de/xslt/ieaxtest/test.htm.

                    MfG, Thomas

                    1. Hi.
                      Ich bin zutiefst beeindruckt!!!! Ehrlich.
                      Aber wie Du weiter unten in unserem ursprünglichen Dialog siehst kann ich diese Variante wahescheinlich nicht verwenden.

                      Antwort bitte wieder in unseren Original dialog!

                      bydey

  2. Hi,
    ich denke, das man keine JavaScript-Variablen in eine XSL-Variable
    verwandeln kann....
    Aber frag das ganze doch im Javascript ab...

    <script language="Javascript" type="text/javascript">
        var java=1;
    </script>
    .
    .
    .
    <script language="Javascript" type="text/javascript">
        var str="";
        if(java == 1)
        {
          str = str + '<xsl:value-of select="..."/>';
        }

    window.document.write(str);
    </script>

    Gruss
    Axel :)

    1. Wenn ich das in HTML teste funktioniert das sehr gut. Aber in einer XSL -> no response. Ich den Wert von str auch schon unter <body> laufen lassen und einfach ein Wort eingfügt -> no response.

      <script language="Javascript" type="text/javascript">
          var java=1;
      </script>
      .
      .
      .
      <script language="Javascript" type="text/javascript">
          var str="";
          if(java == 1)
          {
            str = str + '<xsl:value-of select="..."/>';
          }

      window.document.write(str);
      </script>

      bydey