skunker: XML clientseitig Parsen und als Datei ausgeben

Hallo,

Ist es Möglich XML mit XSL Clientseitig zu parsen, und dann das Resultat als speicherbare Datei anzubieten? Quasi daß der Browser XSLT parst und das Ergebniss als "Save As .." popup kommt. Allerdings ohne Javascript o.ä. zu verwenden.

Ich hab schon im Forum gesucht aber diesbezüglich leider nichts gefunden. Der Hintergrund ist, daß ich aus einer XML-Datenbank eine WordML-Datei mit einem XSL-Stylesheet erstelle, die dann abgespeichert werden soll.

Beschränkungen: Internet Explorer.

danke für eure hilfe,

Viele Grüße, Skunker

  1. Hallo Skunker,

    Ist es Möglich XML mit XSL Clientseitig zu parsen, und dann das Resultat als speicherbare Datei anzubieten? Quasi daß der Browser XSLT parst und das Ergebniss als "Save As .." popup kommt. Allerdings ohne Javascript o.ä. zu verwenden.

    Mit XSL führt man eine Transformation durch, wie der Name schon sagt. Diese erfolgt normalerweise auf dem Server und ich sehe keinen Grund, warum diese bei dir auf dem Client erfolgen sollte. Mit der serverseitigen Scriptsprache Deines Vertrauens (hier ASP) transformierst Du das XML Dokument und gibst es aus:

    Set XSLTemplate = Server.CreateObject("MSXML2.XSLTemplate")
    Set XSLTemplate.stylesheet = xsldoc
    Set proc = XSLTemplate.createProcessor
    proc.input = xmldoc
    proc.Transform
    Response.Write proc.output

    Und wenn Du dann z.B. ein mit Word lesbares Format erzeugst, dann kannst Du es auf dem Server entsprechend ausgeben:

    Response.ContentType = "application/vnd.ms-word"
    Response.AddHeader "Content-Disposition", "filename=bla.doc;"

    'output

    Response.End

    Gruß
    LeKuchen

    1. Hallonochmal,

      so im nachhinein weiß ich nicht, ob ich Dich richtig verstanden habe. Aber vielleicht hilft Dir auch dieser Link weiter:

      http://www.linkwerk.com/pub/xml/invitation/xml2wordml/

      Gruß
      LeKuchen

    2. Hallo, danke für deine Antwort,

      Mit XSL führt man eine Transformation durch, wie der Name schon sagt. Diese erfolgt normalerweise auf dem Server und ich sehe keinen Grund, warum diese bei dir auf dem Client erfolgen sollte. Mit der serverseitigen Scriptsprache Deines Vertrauens (hier ASP) transformierst Du das XML Dokument und gibst es aus:

      Der Grund hierfür ist die Serverauslastung. Da hier ein paar tausend Seiten pro Stunde generiert werden, macht sich das schnell bemerkbar.

      Aber dank dir für deine Informationen, sind hilfreich :)

      1. noch etwas hintergrund hierzu, wo ich diese Idee her hab:

        http://de.wikipedia.org/wiki/Xslt

        2. absatz: ...Solche XSLT-Prozessoren sind auch in vielen modernen Webbrowsern integriert ...

        hab ich so verstanden:
        wenn xslt-prozessoren in den browsern integriert sind, dann brauch ich "nur" noch ein stylesheet im xml anzugeben und dem browser die xml datei öffnen lassen. Müsste das lesen können und richtig interpretieren.

        so war meine überlegung ...

        1. Hallo,

          noch etwas hintergrund hierzu, wo ich diese Idee her hab:

          http://de.wikipedia.org/wiki/Xslt

          1. absatz: ...Solche XSLT-Prozessoren sind auch in vielen modernen Webbrowsern integriert ...

          Das ist korrekt, aber ...

          hab ich so verstanden:
          wenn xslt-prozessoren in den browsern integriert sind, dann brauch ich "nur" noch ein stylesheet im xml anzugeben und dem browser die xml datei öffnen lassen. Müsste das lesen können und richtig interpretieren.

          auch wenn du aus deinem XML mit XSLt WordML im Browser generierst, wird der IE das nicht anzeigen. Die user müssen dann die Datei noch immer speichern und sie dann mit Word (Office 2003) öffnen.

          Grüße
          Thomas

          1. Dank dir für die Antwort,

            auch wenn du aus deinem XML mit XSLt WordML im Browser generierst, wird der IE das nicht anzeigen. Die user müssen dann die Datei noch immer speichern und sie dann mit Word (Office 2003) öffnen.

            Das wäre perfekt, um das mal so zu sagen. Es handelt sich im Moment auch nur um einen Download. Es geht also ... gut, dann geb ich noch nicht auf ;)

            Das Problem, ist im moment nur, daß 1. der IE die xsl datei noch nicht verarbeitet, und 2. er die xml datei anzeigt, anstelle einer dialogbox ala möchten sie die Datei speichern. Anzeigen soll er auch nicht. Ich frage mich hier, ob das ohne Javascript lösbar ist.

            (Möglicherweise könnte man überlegen, daß er die Datei in einer Art embedded Word2003 in MS I-Explorer starten könnte - wenn das geht: ala adobe pdf reader - aber das ist gar nicht nötig.)

            Wichtig wär mir die Merge-sache auf dem Client zu erledigen. Das würde ca 10-20% Rechenleistung sparen (meine nested tables ziehen unglaublich viel).

            Dank euch für eure zeit.

            viele grüße, Skunker

            1. Hallo,

              auch wenn du aus deinem XML mit XSLt WordML im Browser generierst, wird der IE das nicht anzeigen. Die user müssen dann die Datei noch immer speichern und sie dann mit Word (Office 2003) öffnen.

              **)

              Das wäre perfekt, um das mal so zu sagen. Es handelt sich im Moment auch nur um einen Download. Es geht also ... gut, dann geb ich noch nicht auf ;)

              Das Problem, ist im moment nur, daß 1. der IE die xsl datei noch nicht verarbeitet, und 2. er die xml datei anzeigt, anstelle einer dialogbox ala möchten sie die Datei speichern.

              zu 2.) genau das habe ich ja gesagt: --> **); gut, ich habe nicht dazugesagt, dass der IE das WordML als XML-Datei anzeigt, (nur das er nicht das Word.doc anzeigt)

              zu 1) Was beduetet das?
              Entweder findet er die XSL-Datei nicht oder sie ist fehlerhaft und die Transformation wird abgebrochen.

              Anzeigen soll er auch nicht. Ich frage mich hier, ob das ohne Javascript lösbar ist.

              Wo kommt plötzlich JavaScript da ins Spiel?
              Aber auch mit JavaScript wäre das nicht möglich, du müsstest nämlich ein HTTP-Header für die Datei senden (Mime-Type) und das geht auf der Klientseite schon gar nicht.

              (Möglicherweise könnte man überlegen, daß er die Datei in einer Art embedded Word2003 in MS I-Explorer starten könnte - wenn das geht: ala adobe pdf reader - aber das ist gar nicht nötig.)

              Wenn der IE das könnte, würde er auch so Word aufrufen, aber davon abgesehen,  das wäre wiederum eine Sicherheitsfrage im Browser.

              Grüße
              Thomas

              1. hallo,

                zu 2.) genau das habe ich ja gesagt: --> **); gut, ich habe nicht dazugesagt, dass der IE das WordML als XML-Datei anzeigt, (nur das er nicht das Word.doc anzeigt)

                was halt eben ein problem ist :/ - ein download dialog würde reichen... nur hab ich im moment keine idee, wie ich das bewerkstelligen könnt.

                Entweder findet er die XSL-Datei nicht oder sie ist fehlerhaft und die Transformation wird abgebrochen.

                naja, beides nein ... wenn er die xsl nicht finden würde, gäbe er eine Fehlermeldung, und das tut er ned.

                Fehlerhaft ist sie vermutlich* auch nicht. (arbeite mit cooktop - freier xml validator - damit klappt´s problemlos - serverside) Firefox 1.5.0.6 und Internet Explorer 6 öffnen die xml ohne die xsl zu verarbeiten, jedoch geben sie eine Fehlermelung wenn sie nicht vorhanden ist. Fehlerhaft liegt schon nahe, schau ich mir alles mögliche an im Moment.

                (* vermutlich, heißt ich muss noch einiges ausprobieren - mal anderen validator etc. bin ich aber auch gerade dabei)

                Gibt´s vielleicht irgendwelche Einstellungen die ich am IE/Firefox machen muss? - hab nichts gefunden..

                Aber auch mit JavaScript wäre das nicht möglich, du müsstest nämlich ein HTTP-Header für die Datei senden (Mime-Type) und das geht auf der Klientseite schon gar nicht.

                In die richtung ging mein plan:
                xml & xslt via Browser anfordern und cs-verarbeiten--> popup --> Datei-download. Also dacht ich mir, ich könnt über JS nen Pop-Up aufmachen, welches dann die Datei als download rüberbringt, falls ich das nicht auch ohne JS lösen kann. wenn ich das nun auch nicht mit JS lösen kann, beiß ich in die Tastatur ;) (bis JS bin ich noch nicht vorgedrungen)

                Bleibt dann halt nur die serverseitige Lösung...

                1. ok,
                  das problem hat sich erledigt, mein fehler.
                  "save as .." speichert die Quell xml-datei, und nicht die verarbeitete.
                  drum dacht ich, daß die nciht verarbeitet wird. wurde sie jedoch.

                  dank trozdem :)

                2. Hallo,

                  In die richtung ging mein plan:
                  xml & xslt via Browser anfordern und cs-verarbeiten--> popup --> Datei-download. Also dacht ich mir, ich könnt über JS nen Pop-Up aufmachen, welches dann die Datei als download rüberbringt, falls ich das nicht auch ohne JS lösen kann. wenn ich das nun auch nicht mit JS lösen kann, beiß ich in die Tastatur ;) (bis JS bin ich noch nicht vorgedrungen)

                  Bleibt dann halt nur die serverseitige Lösung...

                  Das was mir dazu einfällt ist, dass du die XML/XSL-Transformation zwar im Browser machst, aber nicht direkt, sondern mittles JavaScript (xmlhttprequest, AJAX)aus einer HTML-Seite heraus, somit hättest du am Ende ein koplettes Dokument als DOM. Die Frage ist ob du damit etwas machen kannst: sprich, ob es dir gelingt das Ergebnis der Transformation an ein Save-as Dialog zu übergeben bzw. mit dem Ergebnis das Aufrugen eines auslösen.

                  Grüße
                  Thomas