Mit DOM manipuliertes XML-Dokument abspeichern
snow
- xml
Hi,
also wie das Thema schon sagt, manipuliere ich XML-Dokumente mittels DOM/Javascript. Dies tue ich ja nun aber nur im Speicher des lokalen Rechners, ich hätte aber gern eine Möglichkeit diese neue XML-Datei downzuloaden, bzw. abzuspeichern.
Ist dies möglich?
also wie das Thema schon sagt, manipuliere ich XML-Dokumente mittels DOM/Javascript.
Ich vermute mal, dass der Vorgang clientseitig stattfindet.
Dies tue ich ja nun aber nur im Speicher des lokalen Rechners,
OK. ;)
ich hätte aber gern eine Möglichkeit diese neue XML-Datei downzuloaden, bzw. abzuspeichern.
Das XML muss dann wohl entsprechend verpackt per HTTP-Request an den Server gesandt werden, oder was erwartest Du denn so?
hi,
also wie das Thema schon sagt, manipuliere ich XML-Dokumente mittels DOM/Javascript. Dies tue ich ja nun aber nur im Speicher des lokalen Rechners, ich hätte aber gern eine Möglichkeit diese neue XML-Datei downzuloaden, bzw. abzuspeichern.
Ist dies möglich?
Nicht so ohne weiteres.
DOM Level 3 sieht zwar Methoden zum Lesen/Speichern lokaler Dateien vor - aber bis das Browserübergreifend implementiert ist, ist noch einiges an Gedlug gefragt.
Die einfachste Lösung, die mir spontan einfiele - innerHTML von body oder sogar html in einer Textarea ausgeben, und per Copy&Paste in Texteditor übernehmen und von dort abspeichern. Was um innerHTML herum noch fehlt, dann vielleicht beim befüllen der Textarea hinzufügen.
Oder, wenn eine IE-only-Lösung ausreicht, gleich outerHTML verwenden.
Wobei, der IE dürfte der denkbar schlechteste Kandidat sein - denn was der als innerHTML/outerHTML präsentiert, ist meistens grauenhaft - Elementnamen immer in Großbuchstaben und ähnlichen Unfug. Selbst wenn dein Dokument XHTML ist - also solche ohne weiteres wieterbenutzen kannst du dann knicken, wenn alle Elementnamen in Großbuchstaben sind ...
gruß,
wahsaga
Nicht so ohne weiteres.
Die einfachste Lösung, die mir spontan einfiele - innerHTML von body oder sogar html in einer Textarea ausgeben, und per Copy&Paste in Texteditor übernehmen und von dort abspeichern. Was um innerHTML herum noch fehlt, dann vielleicht beim befüllen der Textarea hinzufügen.
Oder, wenn eine IE-only-Lösung ausreicht, gleich outerHTML verwenden.gruß,
wahsaga
Tja wenn das nicht so einfach ist, mit dem Speichern werde ich wohl erst mal die Idee mit der Textarea umsetzen. Vielen Dank.
Hi,
DOM Level 3 sieht zwar Methoden zum Lesen/Speichern lokaler Dateien vor - aber bis das Browserübergreifend implementiert ist, ist noch einiges an Gedlug gefragt.
Ich hab den Thread grad zufällig gesehen, aber das finde ich sehr interessant. Ich hab mal ein wenig gegooglet. Liege ich richtig damit, dass man über LSSerializer.writeToURI eine Datei lokal speichern können sollte oder spielst du auf eine andere Methode an.
Falls ja, wäre es nett wenn du mir sagen könntest auf welche.
Falls nicht, hätt' ich da gern' mal ein Problem ;-)
Opera kennt die writeToURI-Methode zwar, mein Versuch eine XML-Datei damit lokal zu speichern wird aber mit eine Exception bestraft. Funktioniert das prinzipiell nicht (im Opera) oder liegt der Fehler bei mir?
Danke schonmal im Voraus
Liege ich richtig damit, dass man über LSSerializer.writeToURI eine Datei lokal speichern können sollte oder spielst du auf eine andere Methode an.
Wie ruft man diese Funktion denn auf? Hast du das schon probiert?
Hi!
Liege ich richtig damit, dass man über LSSerializer.writeToURI eine Datei lokal speichern können sollte oder spielst du auf eine andere Methode an.
Erstmal kaufe ich noch ein Fragezeichen. ;-)
Wie ruft man diese Funktion denn auf? Hast du das schon probiert?
var Serializer = document.implementation.[link:http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DOMImplementationLS-createLSSerializer@title=createLSSerializer]();
Serializer.[link:http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-LSSerializer-writeToURI@title=writeToURI](Node, "uri");
Hallo,
Siehe allgemein http://molily.de/dom-load-and-save.
Opera kennt die writeToURI-Methode zwar, mein Versuch eine XML-Datei damit lokal zu speichern wird aber mit eine Exception bestraft. Funktioniert das prinzipiell nicht (im Opera) oder liegt der Fehler bei mir?
Die Exception ist DOMException.NOT_SUPPORTED_ERR, also funktioniert es zum einen nicht im Opera, weil es nicht implementiert ist.
Zum anderen darf JavaScript ohne besondere Rechte keine Dateien anlegen; im http://-Kontext ist daher überhaupt nur die Option des PUT-Uploads zu einem Webserver realistisch, aber das kann Opera eben nicht, dazu müsste man XMLHttpRequest verwenden. Dass im lokalen file://-Kontext Dateien tatsächlich angelegt werden würden, ist in Load & Save gar nicht so konkret festgelegt.
Also: Vergiss DOM 3 Load & Save ganz schnell wieder.
Mathias
Hi!
Danke für die Ausführungen. DOM3 LS kann wohl wirklich grad vergessen.
Wenn das JavaScipt, das im Kontext einer lokal gespeicherten (X)HTML-Datei ausgeführt wird, Dateien lokal erstellen möchte, wäre eine browserübergreifende Lösung wohl, über ein Java-Applet zu gehen. Die in diesem Artikel vorgestellte Lösung funktioniert ja sowohl mit als auch ohne Java-Applet problemlos im Firefox und Opera (auch wenn behauptet wird, die Lösung ohne Applet würde nur mit dem Netscape Navigator funktionieren ;-) ).
Allerdings hat das Applet nur Leserechte. Kann man diesem irgendwie auch Schreibrechte geben?
Hallo,
also wie das Thema schon sagt, manipuliere ich XML-Dokumente mittels DOM/Javascript. Dies tue ich ja nun aber nur im Speicher des lokalen Rechners, ich hätte aber gern eine Möglichkeit diese neue XML-Datei downzuloaden, bzw. abzuspeichern.
Serialisieren, zum Server senden, der die Daten dann mit application/xml wieder zum Browser sendet.
Oder ein Fenster aufmachen, mit document.open("application/xml") das Dokument öffnen und die XML-Daten hineinschreiben (ungetestet - vom Prinzip her).
Kommt wohl darauf an, was du genau vorhast - mit JavaScript direkt Dateien im lokalen Dateisystem schreiben geht jedenfalls nur mit Sonderrechten wie ActiveX im IE, Privilegien wie UniversalFileWrite im Firefox/Gecko oder über Umwege wie Java-Applets.
Mathias