Announcement

Collapse
No announcement yet.

Button o.ä. der Transformation beeinflusst.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Button o.ä. der Transformation beeinflusst.

    Hallo,

    ich hab eine XML-Datei, die sowas wie ein Wörterbuch beschreibt. Mittels XSLT soll das nun im Browser dargestellt werden. Das klappt soweit auch ganz gut. Nur hätte ich gern, dass man wählen kann, ob das ganze Deutsch-Englisch oder Englisch-Deutsch dargestellt wird.
    Bisher hab ich das so gelöst, dass ich in meiner xml am Ende ein Element eingefügt habe, welches angibt was die primäre Sprache sein soll. Das wird dann an die XSLT als Parameter übergeben und die Transformation entsprechend vorgenommen.
    Um das jetzt zu ändern muss man also in der xml Datei das Element ändern.

    Ich hätte das aber ganz gern so, dass man im Browser nen Button hat, der das einfach umschaltet. Nur hab ich keine Ahnung wie man das anstellen soll. Variablen gibts in XSLT ja aber die kann man nicht verändern.

    Notlösung wäre noch den Parameter irgendwie in der URL mitzugeben, z.B. woerterbuch.xml?lang='en' oder so. Aber auch da weiß ich nicht ob das überhaupt irgendwie geht.

    Kann mir jemand helfen?



    Kleiner Ausschnitt aus meiner xsl-Datei, vll hilfts ja irgendwie:
    Code:
    <xsl:param name="language" select="//back/item[@type='mainlang']"/>
    <xsl:template match="/">
      <html>
        <head>
          <title>Wörterbuch</title>
        </head>
      <body>
        <table border="1px" cellpadding="1px" cellspacing="3px" width="100%" bgcolor="#fcffb0">
          <xsl:for-each select="//text/body/termEntry/langSet[@xml:lang=$language]/tig/term">
            <xsl:sort select="."/>
    ...
    ...
    usw...

  • #2
    Mit XSLT, das im Browser durch <?xml-stylesheet?> ausgelöst wird, lässt sich das nicht machen. Wenn man die XSLT-Transformation programmatisch auslöst, entweder auf dem Server mit Framework/Sprache der Wahl (also etwa ASP.NET/C# oder JSP/Java oder PHP o.a.) oder aber im Browser per Javascript, dann kann man sehr wohl den Parameter vor der Transformation setzen, z.b. auch auf einen Wert, der in der URL übergeben wird.

    Comment


    • #3
      Danke schonmal für die Antwort!


      Das ganze soll eigentlich lokal laufen, d.h. ohne Server. Wie würde man denn die Transformation erst mit Javascript auslösen?


      edit: Habe das gefunden:
      Code:
      <script type="text/javascript">
          function XsltTransform()
          {
            var xml = new ActiveXObject("Microsoft.XMLDOM");
            var xslt = new ActiveXObject("Microsoft.XMLDOM");
            xml.async = false;
            xslt.async = false;
            xml.load("tbxbasictest2.xml");
            xslt.load("tbxxsltest_neu.xsl");
            var output = xml.transformNode(xslt);
            var outputDiv = document.getElementById("Output");
            outputDiv.innerHTML = output;
          }
          </script>
      Also so kann ich die Transformation durch javascript auslösen. Funzt zwar nur im IE so aber das reicht, da hier sowieso kein anderer Browser verwendet werden darf...

      Jetzt müsste ich ja nur noch den Parameter ändern und die Transformation erneut durchführen. Letzteres ist kein Problem, aber wie ändere ich den Parameter?

      Habs mit
      Code:
      xslt.getElementsByTagName("xsl:param")[0].childNodes[0].nodeValue="en";
      versucht, das bringt aber immer nen Fehler (auch wenn ich den namespace weglasse).
      Zuletzt editiert von hergipotter; 12.11.2010, 10:39.

      Comment


      • #4
        Mit IE sollte man das so machen:
        Code:
        var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0");
        var xsldoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
        var xslproc;
        xsldoc.async = false;
        xsldoc.load("sheet.xsl");
        
           xslt.stylesheet = xsldoc;
           var xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
           xmldoc.async = false;
           xmldoc.load("input.xml");
        
              xslproc = xslt.createProcessor();
              xslproc.input = xmldoc;
              xslproc.addParameter("param1", "Hello");
              xslproc.transform();
              outputDiv.innerHTML = xslproc.output;
        Siehe http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx

        Comment


        • #5
          Super, vielen herzlichen Dank!


          Warum das mit meiner Methode und dem getElementsByTagName nich gefunzt hat, kapier ich immernoch nicht, aber is ja auch egal...

          Comment


          • #6
            Warum das mit meiner Methode und dem getElementsByTagName nich gefunzt hat, kapier ich immernoch nicht
            Das müsste man sich noch mal genauer ansehen. Welchen Fehler genau hast du bekommen?

            Comment


            • #7
              Hm, sehr seltsam, habe gerade versucht den Fehler zu reproduzieren aber jetzt funktioniert es auch mit getElementsByTagName einwandfrei...
              Hatte vorher sowas in der Art wie "Element is no Object or NULL" als Fehler bekommen, also anscheinend hatte er den Knoten nicht finden können. Jetzt tut ers anscheinend.

              Vielen Dank nochmal!!

              Comment

              Working...
              X