Holger: XML auslesen, und auch zurückschreiben?

Guten Morgen Deutschland,
Ich habe nicht so viel Ahnung von XML, sieht aber ganz praktisch aus. Auslesen und verarbeiten von XML mit Java dürfte ja auch kein Problem sein, aber wie sieht es aus, wenn man veränderungen zurückschreiben möchte? Ich das möglich? Oder muss ich die gesammte XML Datei neu generieren?
Und wenn ich mit Datei arbeite, kann ich irgendwie verhindern, dass der Anwender darin Rumpfuschen kann?

Gruß

Holger

  1. Hi,

    Ich habe nicht so viel Ahnung von XML, sieht aber ganz praktisch aus. Auslesen und verarbeiten von XML mit Java dürfte ja auch kein Problem sein, aber wie sieht es aus, wenn man veränderungen zurückschreiben möchte? Ich das möglich?

    Nein, XML-Dateien können NIE verändert werden ;-)
    Natürlich können XML-Dateien geändert werden.

    Oder muss ich die gesammte XML Datei neu generieren?

    Jein.
    Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.

    Und wenn ich mit Datei arbeite, kann ich irgendwie verhindern, dass der Anwender darin Rumpfuschen kann?

    Da Du nichts über das Umfeld Deines Java-Programms (Application, Applet, Servlet, ...) sagst, kann diese Frage nicht beantwortet werden...

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Hallo,

      Jein.
      Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.

      D.h., diesbezüglich keine Verbesserung zu normalen TextDateien

      Und wenn ich mit Datei arbeite, kann ich irgendwie verhindern, dass der Anwender darin Rumpfuschen kann?

      Da Du nichts über das Umfeld Deines Java-Programms (Application, Applet, Servlet, ...) sagst, kann diese Frage nicht beantwortet werden...

      Eine Application ist es.

      Vielen Dank

      Holger

      1. Hi,

        Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.
        D.h., diesbezüglich keine Verbesserung zu normalen TextDateien

        Nein, wie auch? Es liegt ja am zugrundeliegenden Dateisystem...

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
        1. Hallo,

          Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.
          D.h., diesbezüglich keine Verbesserung zu normalen TextDateien

          Nein, wie auch? Es liegt ja am zugrundeliegenden Dateisystem...

          Das würde ich so nicht sagen/sehen.
          Er kann sehr wohl mit Java incrementelle änderungen an XML-Dateien durchführen. Aber die Aussage, dass seine Anwendung eine Application ist, ist ebenso wenig hilfreich in diesem Fall, als er über das Wetter gesprochen hätte.

          @Holger: entweder denke ich zu kompliziert, ober aber dadurch, dass du so wenig sagtest erschient es mir nur so, aber was du möchtest ist eine releativ komplizierte angelegenheite. Kompliziert, weil es von sehr vielen Faktoren abhängt: welche Software sind im Spiel, wie arbeiten die Software zusammen, welche APIs stehen zur Verfügung und wie weit du diese nützen, erweitern kannst, wo/wie ist die Datenhaltung etc. etc.

          IBM hat so viele viele versch. Tools, schau dir einfach mal an was sie bieten: http://www-106.ibm.com/developerworks/

          Grüße
          Thomas

          1. Hi,

            Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.
            D.h., diesbezüglich keine Verbesserung zu normalen TextDateien
            Nein, wie auch? Es liegt ja am zugrundeliegenden Dateisystem...
            Das würde ich so nicht sagen/sehen.
            Er kann sehr wohl mit Java incrementelle änderungen an XML-Dateien durchführen.

            Dann guck Dir mal an, was tatsächlich auf der Festplatte geschieht, wenn die Änderungen zurückgeschrieben werden.
            Ein einfaches Anhängen geht ja nicht, da das Wurzelelement der XML-Datei erweitert wird - also muß zumindest dessen end-tag übergebügelt werden.
            Mir ist kein Dateisystem bekannt, daß es erlaubt, an beliebiger Stelle einer Datei etwas einzufügen...

            Aber die Aussage, dass seine Anwendung eine Application ist, ist ebenso wenig hilfreich in diesem Fall, als er über das Wetter gesprochen hätte.

            Doch, ist sie. Nicht, was die Änderung von XML über Java angeht, sondern im Zusammenhang mit seiner zweiten Frage, wie er die Anwender davon abhalten kann, in der XML-Datei "rumzupfuschen".
            Wäre sein Java-Programm ein Servlet statt einer Applikation, könnte man die XML-Datei einfach in einem nicht per http zugänglichen Bereich ablegen...

            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
            http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
            1. Hallo Andreas,

              Das würde ich so nicht sagen/sehen.
              Er kann sehr wohl mit Java incrementelle änderungen an XML-Dateien durchführen.

              Dann guck Dir mal an, was tatsächlich auf der Festplatte geschieht, wenn die Änderungen zurückgeschrieben werden.
              Ein einfaches Anhängen geht ja nicht, da das Wurzelelement der XML-Datei erweitert wird - also muß zumindest dessen end-tag übergebügelt werden.
              Mir ist kein Dateisystem bekannt, daß es erlaubt, an beliebiger Stelle einer Datei etwas einzufügen...

              1. Ich sprach nicht über Dateisysteme sondern über Datenhaltung.
              2. Wenn du mir nicht glaubst, dass es möglich ist, XML-Dateien incrementell zu ändern, ist es deine Sache und ich kann wirklich nichts dafür.

              Aber die Aussage, dass seine Anwendung eine Application ist, ist ebenso wenig hilfreich in diesem Fall, als er über das Wetter gesprochen hätte.

              Doch, ist sie. Nicht, was die Änderung von XML über Java angeht, sondern im Zusammenhang mit seiner zweiten Frage, wie er die Anwender davon abhalten kann, in der XML-Datei "rumzupfuschen".
              Wäre sein Java-Programm ein Servlet statt einer Applikation, könnte man die XML-Datei einfach in einem nicht per http zugänglichen Bereich ablegen...

              Auch oder gerade bei einer Applikation kann er Daten so halten, dass eine Änderung der Daten von "aussen" nicht möglich ist.

              Grüße
              Thomas

              1. Hi,

                1. Wenn du mir nicht glaubst, dass es möglich ist, XML-Dateien incrementell zu ändern, ist es deine Sache und ich kann wirklich nichts dafür.

                Du verwechselst m.E. XML-Dokument mit XML-Datei.

                Daß es möglich ist, ein XML-Dokument inkrementell zu ändern, weiß ich.
                Aber eine XML-Datei auf den gängigen Betriebssystemen nicht, wie bereits ausgeführt.

                Guck Dir mal an, was tatsächlich passiert, wenn Du ein aus einer XML-Datei geladenes XML-Dokument änderst und es wieder in die XML-Datei zurückschreibst.

                cu,
                Andreas

                --
                Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
                http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
                1. Hallo Andreas,

                  Du verwechselst m.E. XML-Dokument mit XML-Datei.

                  *hehe* Das finde ich jetzt gerade angesichts von http://forum.de.selfhtml.org/archiv/2003/1/36049/ wirklich lustig.

                  Daß es möglich ist, ein XML-Dokument inkrementell zu ändern, weiß ich.
                  Aber eine XML-Datei auf den gängigen Betriebssystemen nicht, wie bereits ausgeführt.

                  Ich rede(te) schon deshalb über die ganze Zeit von Datenhaltung und nicht von Dateisystem.

                  Aber wenn ich ein sehr einfaches Beispiel nehme: ich editierte auf meine Festlpatte eine XML-Datei mit dem Editor, dort ändere ich mitten drinn einige Elemente, was passiert beim Speichern?

                  Guck Dir mal an, was tatsächlich passiert, wenn Du ein aus einer XML-Datei geladenes XML-Dokument änderst und es wieder in die XML-Datei zurückschreibst.

                  Ich weiss jetzt nicht was du damit meinst. Ein </root> bleibt auch nach dem Speichern </root>. Dass sich die Dateiattribute ändern (Dateigröße, Änderungsdatum. etc.) erschient mir durchaus logisch, deshalb versthe ich nicht worauf du hinweisen möchtest.

                  Grüße
                  Thomas

                  1. Hi,

                    Ich rede(te) schon deshalb über die ganze Zeit von Datenhaltung und nicht von Dateisystem.

                    Du schriebst XML-Datei, nicht XML-Dokument.

                    Aber wenn ich ein sehr einfaches Beispiel nehme: ich editierte auf meine Festlpatte eine XML-Datei mit dem Editor, dort ändere ich mitten drinn einige Elemente, was passiert beim Speichern?

                    Es wird die komplette Datei neu geschrieben.

                    Guck Dir mal an, was tatsächlich passiert, wenn Du ein aus einer XML-Datei geladenes XML-Dokument änderst und es wieder in die XML-Datei zurückschreibst.
                    Ich weiss jetzt nicht was du damit meinst. Ein </root> bleibt auch nach dem Speichern </root>. Dass sich die Dateiattribute ändern (Dateigröße, Änderungsdatum. etc.) erschient mir durchaus logisch, deshalb versthe ich nicht worauf du hinweisen möchtest.

                    Es geht darum, daß mindestens der Teil der Datei, an der die erste Änderung gemacht wurde, neu geschrieben werden muß. Und nicht nur die Änderung selbst, sondern alles, was danach kommt, auch.
                    Also genau so, wie es auch bei einer Textdatei wäre.
                    Alle mir bekannten Betriebssysteme erlauben es NICHT, Teile mitten in einer Datei einzufügen.

                    cu,
                    Andreas

                    --
                    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
                    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
                    1. Hallo Andreas,

                      Ich rede(te) schon deshalb über die ganze Zeit von Datenhaltung und nicht von Dateisystem.

                      Du schriebst XML-Datei, nicht XML-Dokument.

                      Ja, aber gerade deshalb habe ich nach der Datenhaltung gefragt. Wenn die XML-Dateien einfach im Filesystem gespeichert werden ist es eine Sache und es ist eine andere wenn sie in einem (XML)Repository der Applikation gespeichert werden.

                      In diesem Zusammenhang könnte und CK sagen, wie das z.B. hier im Forum funktioniert ;-)

                      Es geht darum, daß mindestens der Teil der Datei, an der die erste Änderung gemacht wurde, neu geschrieben werden muß. Und nicht nur die Änderung selbst, sondern alles, was danach kommt, auch.
                      Also genau so, wie es auch bei einer Textdatei wäre.
                      Alle mir bekannten Betriebssysteme erlauben es NICHT, Teile mitten in einer Datei einzufügen.

                      OK. Soweit kann ich dir folgen, jedoch würde es dann keinen Sinn machen, die ganze DOM- und SAX-Parser zu entwicklen, wenn es nicht anders auch ginge und dieses "anders" war mein Ansatz da es einige Anwendungen gibt die mit einem XML-Repository arbeiten (Excelon, TextML-Server, Schema TextServer etc. ) und dort kann man eben Teile von XML-Dateien (oder Dokumenten, da es nicht immer Dateien im herkömmlichen Sinne gespiechert werden) bearbeiten. Und weil die meisten dieser Applikationen über eine Java API verfügen, kann man so auch auf die Repository und auf deren Inhalte zugreifen. So habe ich es gemeint.

                      Grüße
                      Thomas

              2. Auch oder gerade bei einer Applikation kann er Daten so halten, dass eine Änderung der Daten von "aussen" nicht möglich ist.

                Könnte das noch mal näher erläutert werden? :-)

                1. Hallo,

                  Auch oder gerade bei einer Applikation kann er Daten so halten, dass eine Änderung der Daten von "aussen" nicht möglich ist.

                  Könnte das noch mal näher erläutert werden? :-)

                  Ich versuchs: wie du vielleicht aus dem zwischengespärch von Adreas und mir entnehmen konntest, mache ich einen unterschied zwischen Dateisystem und Datenhaltung. Auch habe ich schon dafauf hingewisen, dass es Anwendungen gibt, die Daten nicht im Filesystem sondern in einem internen Repostitory speichern. Bei solchen Anwendungen kann man die Daten aus der Repository abfragen, aber ändern geht nur über die Applikation selbst, d.h. wenn jemand die Daten "gewaltsam" ändern will muss quasi erst die Anwendung knacken. Es kommt also darauf an was für eine Applikation du hast und wie bei ihr die Datenhaltung gelöst ist.
                  Es gibt ziemlich viele Möglichkeiten auch noch dann wenn die Daten im Filsystem gehalten werden: z.B. virtuelle Hosts, oder "Server" wo ein Teil der Anwendung auf einem anderen Port als der Rest läuft etc.

                  Es ist aber etwat schwer mehr als einige allgemeine Bemerkungen zu machen, da du weder über deine Applikation noch über deine Möglichkeiten noch über die Anforderungen etwas gesagt hast.

                  Grüße
                  Thomas

    2. Guude!

      Oder muss ich die gesammte XML Datei neu generieren?
      Jein.
      Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.

      Man muss in Java nicht unbedingt mit String-Methoden arbeiten, um XML-Inhalte zu verändern. Es gab in der Enterprise-Edition der vorigen Java-Version (JSEE 1.3.1) u.a. die Pakete "org.w3c.dom" und "org.xml.sax", mit deren Klassen man direkt auf Knoten, deren Inhalte und Attribute zugreifen konnte. Ich habe gerade gesehen, dass diese Pakete in der 1.4er Version nicht mehr enthalten sind, aber etwas Ähnliches sollte sich auch da finden.

      LG ausm Hesseland
      Lemmy

      1. Hi,

        Du könntest den Schreib-Zeiger auf die Position vor der ersten Änderung setzen und nur ab der ersten Änderung neu schreiben.
        Man muss in Java nicht unbedingt mit String-Methoden arbeiten, um XML-Inhalte zu verändern.

        Hab ich auch nicht behauptet. Hab nur gesagt, daß man so vermeiden könnte, die komplette Datei zu schreiben.

        cu,
        Andreas

        --
        Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
        http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
      2. Hi Lemmy,

        Man muss in Java nicht unbedingt mit String-Methoden arbeiten, um XML-Inhalte zu verändern. Es gab in der Enterprise-Edition der vorigen Java-Version (JSEE 1.3.1) u.a. die Pakete "org.w3c.dom" und "org.xml.sax", mit deren Klassen man direkt auf Knoten, deren Inhalte und Attribute zugreifen konnte.

        Dazu brauchst du nicht J2EE, das geht auch ohne. Einfach z.B. Xerces/Xalan installieren und in den Classpath aufnehmen.

        Gruß,
        Martin