Anarchy: Wie kann ich in XSL eine JavaScript Variable einlesen ?

Hallo zusammen ,

Ich hab nu sowas :

EIne echt lange XML datei und ne XSL die diese zu einer HTML verarbeitet - klappt prima ...

Ich kann auch über einen parameter und eine Template vorgeben welche teile der XML überhaupt verarbeitet werden sollen

Hier ein kleines Beispiel :

<auto marke="bmw" modell="M5">
    <farbe>Blau</farbe>
    <motor>V8</motor>
    <ps>400</ps>
</auto>

nun kann ich alle autos anzeigen lassen indem ich auf die marke verweise. (in echt sind es natürlich andere Elemente und Attribute)

Nun will ich Aber auch auswählen welche daten angezeigt werden sollen - und zwar mit einem Drop Down menü ... ich kann auch schon weite Per JavaScript übergeben - nur weiß ich nicht wie ich nun den JavaScript wert in eine XSL variable einlesen kann ... und ob das überhaupt möglich ist ...

Wie siehts aus jemand aus dem XML/XSL bereich hier ???

Danke schonmal :)

  1. Hallo,

    EIne echt lange XML datei und ne XSL die diese zu einer HTML verarbeitet - klappt prima ...

    Wie verarbeitest Du (Client- oder Server-seitig)?

    Nun will ich Aber auch auswählen welche daten angezeigt werden sollen - und zwar mit einem Drop Down menü ... ich kann auch schon weite Per JavaScript übergeben - nur weiß ich nicht wie ich nun den JavaScript wert in eine XSL variable einlesen kann ... und ob das überhaupt möglich ist ...

    Mit dem MXSML-DOM APIs koennte so etwas im IE funktionieren ...

    Ansonsten pruefe mal die Server-seitigen Moeglichkeiten. Ich habe etwas Aehnliches gerade mit Sablotron/PHP realisiert und dabei vor der Transformation eine XSL-Datei mit xsl:variable-Definition geschrieben, die dann vom Haupt-Stylesheet per xsl:include eingelesen wird.

    MfG, Thomas

    1. Ich hab alles auf dem Client - da es ja keinen Server gibt bzw. geben wird ... das endprodukt will ich auf CD gebrennen - und dann soll es mit dem IE anschaubar sein ohne irgendwelche extra software.

      1. Hallo,

        Ich hab alles auf dem Client - da es ja keinen Server gibt bzw. geben wird ... das endprodukt will ich auf CD gebrennen - und dann soll es mit dem IE anschaubar sein ohne irgendwelche extra software.

        Vorschlag:
        Erstelle mehrere XSL-Dateien, die dann ueber eine Auswahlliste zugewiesen werden. Wie man das MSXML-ActiveX-Objekt anspricht, ist hier zu sehen:
        http://www.styleassistant.de/tips/convert-xml-xsl-html.htm.

        MfG, Thomas

        1. Wenn ich für jedes element eine XSL erstellen würde ... dann hätte ich mehrere hundert ... also nö

          Icj hatte ja geschriben - "echt lang" ... na gut, es sind einige echt lange XMLs

          trotzdem danke ...

          1. Hallo,

            Wenn ich für jedes element eine XSL erstellen würde ... dann hätte ich mehrere hundert ... also nö

            Icj hatte ja geschriben - "echt lang" ... na gut, es sind einige echt lange XMLs

            Dann kannst Du versuchen, mit DOM-Methoden wie createElement, appendChild usw. neue XSL-Elemente in den XSL-Knotenbaum einzuhaengen oder auf vorhandene Elemente/Attribute zuzugreifen.

            Beispiel 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:template match="/">

            <xsl:variable name="abc">123</xsl:variable>

            </xsl:template>

            </xsl:stylesheet>

            Zugriff:

            xslinput=new ActiveXObject("Microsoft.XMLDOM");
            xslinput.async=false;
            xslinput.load("test.xsl");

            abc=xslinput.documentElement.getElementsByTagName("xsl:variable")[0].firstChild.nodeValue;
            alert(abc); //--> 123
            xslinput.documentElement.getElementsByTagName("xsl:variable")[0].firstChild.nodeValue=456;
            abc=xslinput.documentElement.getElementsByTagName("xsl:variable")[0].firstChild.nodeValue;
            alert(abc); //--> 456

            In diese Richtung solltest Du weiterdenken.

            MfG, Thomas

            1. Ich poste mal die test dateien :

              Die erste mit dem menü -

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              <html>
              <head>
              <title>Wertübergabe mit window.name / Beispiel 1 - Seite 1</title>
              <script language="JavaScript" type="text/javascript">
              <!--
              function aufruf(selObj) {
                self.name=selectWert(selObj);
                self.location.href="wertueb1a.htm";
              }
              function selectWert(sObj) {
                return sObj.options[sObj.selectedIndex].value;
              }
              //-->
              </script>

              </head>

              <body bgcolor="#eeeeee" text="#000000" link="#aa5522" vlink="#772200" alink="#000000">

              <FORM NAME="eform" onSubmit="aufruf(document.eform.zahl);return false">

              <select name="zahl" size="1">
                <option value="42001">General Information</option>
                <option value="42002">Brake pads, brake calipers, brake discs</option>
                <option value="42003">Brake cooling duct</option>
                <option value="42004">Parking brake</option>
                <option value="42005">ABS</option>
                <option value="42006">ASR IV</option>
                <option value="42007">Repair notes</option>
               </select><br>
               <INPUT TYPE="Submit" VALUE="Abspeichern">

              </FORM>

              </body>
              </html>

              und die übernehmende die dann ne zahl ausgibt -

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              <html>
              <head>
              <title>Wertübergabe mit window.name / Beispiel 1 - Seite 2</title>

              <script language="JavaScript" type="text/javascript">
              <!--
              function meld() {
                alert("Das war nur ein Test!\nDie Eingabeseite wird erneut geladen.");
                self.location.href="wertueb1.htm";
              }
              var zahl=parseInt(window.name);
              //-->
              </script>

              </head>

              <body bgcolor="#eeeeee" text="#000000" link="#aa5522" vlink="#772200" alink="#000000">

              <form action="" onSubmit="meld();return false">
              <script language="JavaScript" type="text/javascript">
              <!--
                document.write(zahl);
              //--></script>
              </form>

              </body>
              </html>

              Das geht wenn man die einfach im gleichen verzeichniss hat - das heißt ich brauche nur noch "zahl" irgendwie nach XSL zu befördern ...

              nur wie - ich stehe gerade an der Ziellinie und weiß nicht wie ich weitergehen kann ;-(

        2. Hallo Thomas,

          Vorschlag:
          Erstelle mehrere XSL-Dateien, die dann ueber eine Auswahlliste zugewiesen werden.

          ehm ... das ist wirklich unnötig und kann dazu noch ziemlich ausarten.

          Grüße
          Thomas

          1. Hallo Thomas,

            Vorschlag:
            Erstelle mehrere XSL-Dateien, die dann ueber eine Auswahlliste zugewiesen werden.

            ehm ... das ist wirklich unnötig und kann dazu noch ziemlich ausarten.

            Das wurde mir nach meiner Idee zum DOM-Zugriff auch klar, aber ich habe nun meine Server-seitige Anwendung auch noch Client-seitig realisieren koennen.

            MfG, Thomas

      2. Hallo,

        Ich hab alles auf dem Client - da es ja keinen Server gibt bzw. geben wird ... das endprodukt will ich auf CD gebrennen - und dann soll es mit dem IE anschaubar sein ohne irgendwelche extra software.

        wenn deime mail-adresse richtig ist hast du eine mail (leider dann ich die dateien nicht im forum stellen)

        grüße
        Thomas