AJAX und XSLT

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • AJAX und XSLT

    Jeder der schon mal mit AJAX gearbeitet hat weiß ja, dass es ziemlich mühselig ist die Antwort entweder mittels JSON oder XML zu interpretieren. Das ganze wird richtig codelastig. Deswegen wollte ich das ganze jetzt mal mit XSLT versuchen.

    Mein XML Dokument sieht folgendermaßen aus:

    PHP-Code:
    <root>
    <
    member>
    <
    memid>2006-0002</memid>
    <
    aktiv>1</aktiv>
    <
    nachname>XX</nachname>
    <
    vorname>XX</vorname>
    <
    standort>Teststandort</standort>
    </
    member>
    <
    member>
    <
    memid>2006-0001</memid>
    <
    aktiv>1</aktiv>
    <
    nachname>XX</nachname>
    <
    vorname>XX</vorname>
    <
    memid>gp</memid>
    <
    standort>Teststandort </standort>
    </
    member>
    </
    root
    Das ganze wird mit dem folgenden XSL Anweisungen transformiert:

    PHP-Code:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <
    xsloutput method="html" />
        <
    xsl:template match="root">
            <
    html>
                <
    body>
                    <
    table>
                        <
    xsl:apply-templates select="member" />
                    </
    table>
                </
    body>
            </
    html>
        </
    xsl:template>
        
        <
    xsl:template match="member">
            <
    tr>
                <
    td><xsl:value-of select="memid"/></td>
                <
    td><xsl:value-of select="nachname"/></td>
                <
    td><xsl:value-of select="vorname"/></td>
            </
    tr>
        </
    xsl:template>
        
    </
    xsl:stylesheet
    Ist eine ganz einfache Ausgabe. Wenn ich mir die XML Datei direkt im Browser anzeigen lasse, stimmt auch alles. Nur wenn ich die Antwort wie AJAX empfange und dann den respon************ML durchgehe, sehe ich den reinen XML Tree ohne Transformation, als ob das XSL nicht ausgeführt wurde

    Meine Frage ist, wie ich das Problem lösen kann, damit ich einfach die Antwort als transformiertes XML (also in diesem Fall HTML) erhalte und damit direkt einbinden kann!? Wäre nett wenn jemand mir da helfen kann oder auf Hilfen veweisen könnte.

  • #2
    Re: AJAX und XSLT

    Original geschrieben von Shadun
    Nur wenn ich die Antwort wie AJAX empfange und dann den respon************ML durchgehe, sehe ich den reinen XML Tree ohne Transformation, als ob das XSL nicht ausgeführt wurde
    Es wurde nicht ausgeführt.

    Wenn du das willst, musst du dem Browser das noch mitteilen - also in Javascript einen XSLT-Prozessor starten (sofern der JS-Interpreter des Browsers dies ermöglicht.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ok, ich habe jetzt den XSLT Prozessor von JS benutzt, bei Mozilla auch kein Problem, auch beim Internet Explorer bekomme ich das Ergebnis angezeigt. Nur kriege ich das vom IE als Text zurück und muss das über innerHTML einbinden, was natürlich jeglichen DOM-Zugriff auf die eben eingebundenen Dateien unmöglich macht. Gibts dafür eine Lösung?

      Kommentar


      • #4
        ich weis nicht wie du das mit javascript machst, aber
        du kannst einfach ein php-script schreiben, der eine transformation durchführt und mit dem ajax die transformierte ausgabe zu bekommen.
        so ein phpscript könnte 2 parameter haben:
        pfad bis xml und pfad bis xslt dateien
        Slava
        bituniverse.com

        Kommentar


        • #5
          Also mit JS XSLT Prozessor funktioniert es eigentlich sehr gut, vor allem, weil der die Transformation Client-Seitig ausführt und so die Antwortzeit meines Scriptes reduziert.

          Auch das IE Problem habe ich jetzt gelöst (durch Zufall), falls jemand das gleiche Problem hat kann ich den JS Code gerne mal posten, hab ihn grad nicht greifbar sonst würd ich das gleich machen

          Von daher ist bei mir bis auf ein paar Probleme mit XSLT alles klar. Vielen Dank.

          Kommentar


          • #6
            super!
            wenn du die Quellcode anhängst, dann könnte es vielleicht Anderen helfen
            Slava
            bituniverse.com

            Kommentar


            • #7
              Code

              So, dann hier mal der Code als JS Klasse.
              PHP-Code:
              function xsltProcessor()
              {
                  
              //Vars
                  
              this.xslt null;
                  
              this.xml  null;
                  
                  
              //Ini-Methode
                  
              this.initialize = function ()
                  {
                      
              //Mozilla
                      
              if(window.XSLTProcessor)
                      {
                          
              this.xslt document.implementation.createDocument(''''null);
                      
                          
              this.xslt.async false;
                      }
                      
              //IE
                      
              else
                      {
                          
              this.xslt = new ActiveXObject('MSXML2.DOMDocument');
                          
              this.xslt.async false;
                          
                          
              this.xml = new ActiveXObject('MSXML2.DOMDocument');
                          
              this.xml.async false;
                          
                      }
                  }
                  
                  
              //XSL Datei einladen
                  //@return: transformiertes DOM Document
                  
              this.transform = function (xmlDateixsltDatei)
                  {
                      
              //Mozilla
                      
              if(window.XSLTProcessor)
                      {
                          
              this.xslt.load(xsltDatei);
                      
                          var 
              process = new XSLTProcessor();
                          
              process.importStylesheet(this.xslt);
                          
                          return 
              process.transformToFragment(xmlDateidocument);
                      }
                      
              //IE
                      
              else
                      {
                          
              this.xslt.load(xsltDatei);
                          
              this.xml.load(xmlDatei);
                          
                          return 
              this.xml.transformNode(this.xslt.documentElement);
                      }
                  }
                  
                  
              this.initialize();

              Beispiel:
              PHP-Code:
              var XSLTProcessor = new xsltProcessor();

              var 
              dom XSLTProcessor.transform('xml/some.xml''xsl/some.xsl'); 
              Dom-Var müsst ihr dann nur noch einbinden. Dran denkten bei IE innerHTML zu benutzen, bei Mozilla appendChild. Viel Spass.

              Kommentar

              Lädt...
              X