XML Datei Editieren

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

  • XML Datei Editieren

    Hallo, ich bin grad dabei eine XML datei zu erstellen/editieren, nur leider kann ich immer nur einen Datensatz scheiben und dieser wird dann immer durch den neuen überschrieben.


    $configs = new Configs;
    $config = $configs->createconfig();

    $config->setHost($_POST["host"]);
    $config->setUser($_POST["user"]);
    $config->setPass($_POST["password"]);
    $config->setName($_POST["name"]);

    Hier setze ich die daten und die XML Datei sieht dann so aus:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <configs>
    <config id="1">
    <host>host</host>
    <user>user</user>
    <pass>pass</pass>
    <name>name</name>
    </config>
    </configs>


    Ich will das aber eigentlich so haben, dass ich da z.B. noch einen Datensatz stehen habe wo dann ID=2 steht oder noch einen und dann ID=3. Hat einer ne idee wie ich das realisieren kann?

  • #2
    Re: XML Datei Editieren

    Und wir raten jetzt, woraus deine Klasse Configs besteht ...?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      oh sorry:
      Config.php
      PHP-Code:
      <?

      class Config extends DOMElement {

      private $document;

      public function __construct(DOMDocument $document) {
          parent::__construct('config');
          $this->document = $document;
      }

      public function setHost($host) {
          $this->appendChild(
              $this->document->createElement(
              'host',
              $host
          )
         );
      }

      public function setUser($user) {
          $this->appendChild(
              $this->document->createElement(
              'user',
              $user
          )
         );
      }

      public function setPass($pass) {
          $this->appendChild(
              $this->document->createElement(
              'pass',
              $pass
          )
         );
      }

      public function setName($name) {
          $this->appendChild(
              $this->document->createElement(
              'name',
              $name
          )
         );
      }

      public function setID($id) {
          $this->SetAttribute('id', $id);
          }
      }

      ?>



      Configs.php
      PHP-Code:
      <?php
      require_once 'Config.php';

      class 
      Configs extends DOMDocument {
          private 
      $configs;
          
          public function 
      __construct() {
              
      parent::__construct('1.0''iso-8859-1');
              
              
      $this->configs $this->appendChild(
                
      $this->createElement('configs')
              );
              
              
      $this->formatOutput TRUE;
          }
          
          public function 
      createconfig() {
              
      $config = new config($this);
              
      $this->configs->appendChild($config);
              
              return 
      $config;
          }
      }

      $test[] = $_POST["host"];


      $configs = new Configs;
      $config $configs->createconfig();

      $config->setHost($_POST["host"]);
      $config->setUser($_POST["user"]);
      $config->setPass($_POST["password"]);
      $config->setName($_POST["name"]);
      $config->setID('1');

      print 
      $configs;
      print 
      $configs->saveXML();
      print 
      $configs->save('config.xml');
      ?>

      Kommentar


      • #4
        sei verdammt der Tag als XML erfunden wurde, und der Tag, als die Programmierer faul geworden sind eine einfache Schnittstelle zu implementieren.
        jetzt heulen wir, dass wir mit XML nicht mehr zu recht kommen
        PHP-Code:
        //$xml kann von deiner Datei geladen werden z.b.s file_get_contents
        $xml=<<<xml
        <?xml version="1.0" encoding="iso-8859-1"?>
        <configs>
        <config id="1">
        <host>host</host>
        <user>user</user>
        <pass>pass</pass>
        <name>name</name>
        </config>
        </configs>
        xml;
        PHP-Code:
        $node="<config id=\"%s\">
        <host>%s</host>
        <user>%s</user>
        <pass>%s</pass>
        <name>%s</name>
        </config>"
        ;

        $pattern '/(?:id\\="(\\d++)")/';
        preg_match_all($pattern$xml$array);
        if(isset(
        $array[1])){
          
        $array[1][]=0;
        $maxid=call_user_func_array("max",$array[1])+1;
        }
        else 
        $maxid=0;
        $node=sprintf($node,$maxid,$_POST["host"],$_POST["user"],$_POST["password"],$_POST["name"]);
        //statt echo kannst du alles wieder in datei schreiben
        echo str_replace"</configs>",$node."\r\n</configs>",$xml); 
        Slava
        bituniverse.com

        Kommentar


        • #5
          ich beginne langsam zu verzweifeln, dass OOP wirklich so gut für online Anwendungen ist.
          ist das wirklich gut für jede beschi...ne egenschaft eine seter-Methode zu machen?
          ist das wirklich übersichtlicher?
          ist das auch von der Performends sicht besser?
          Slava
          bituniverse.com

          Kommentar


          • #6
            Original geschrieben von Slava
            ich beginne langsam zu verzweifeln, dass OOP wirklich so gut für online Anwendungen ist.
            ist das wirklich gut für jede beschi...ne egenschaft eine seter-Methode zu machen?
            ist das wirklich übersichtlicher?
            ist das auch von der Performends sicht besser?
            Es geht bei OOP um strukturierten Code. Performante OOP ist eine Kunst für sich, aber generell sollte man Struktur der Performance bevorzugen. Ansonsten hat man irgendwann eine Anwendung, die zwar unheimlich performant ist, die man aber nur noch wegwerfen kann, weil sie nicht erweiterbar ist. <- Meine Meinung (ich weiß, dass die nicht alle teilen. Aber das sind dann die Leute, die ihre Projekte immer wegwerfen, also *ignore-modus on*)

            Aber das Thema ist vollkommen off-topic *zucks*

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              erweitere die methode createconfig() doch um einen banalen zähler mit einer statischen variable.

              OffTopic:
              Slava, schlecht geschlafen?

              Kommentar


              • #8
                Original geschrieben von Slava
                sei verdammt der Tag als XML erfunden wurde, und der Tag, als die Programmierer faul geworden sind eine einfache Schnittstelle zu implementieren.
                jetzt heulen wir, dass wir mit XML nicht mehr zu recht kommen
                Original geschrieben von ghostgambler


                ...

                Aber das Thema ist vollkommen off-topic *zucks*
                OffTopic:
                schade, hatte schon lange keine philosophische grundsatzdiskussion mehr...



                sorry... weiter im text
                Zuletzt geändert von arkos; 05.10.2006, 20:47.
                **********
                arkos
                **********

                Kommentar


                • #9
                  Original geschrieben von penizillin

                  OffTopic:
                  Slava, schlecht geschlafen?
                  vermutlich.
                  In jedem fall klingt meine aussage agresiv, wofür ich mich entschuldigen möchte.

                  ich kann eigentlich java und c#, da geht überhaupt nichts ohne classen und vererbung.
                  Die frage ist nun ob es vielleicht sinn macht statt 5 seter Methoden nur eine zu machen die etwa setNode heist und entweder 1 Array erwartet, oder einfach 5 parameter?
                  muss man wirklich von Domelement was ableiten wenn man viel schneller mit einfachen preg_match zu recht kommt?

                  OOP?
                  kein problem.
                  bitte mein codestück in eine methode von einem Object mit namen addUser reinhauen und da hat man sofort ein namespace und die code bleibt nicht mehr in lüft hängen.

                  XML?
                  eine datenbank-system für die Armen.
                  es gibt nichts, was XML besser als DB machen könnte

                  wann ist XML interesant?
                  nur dann, wenn man die verschahtelte daten an eine andere Programm übergeben muss.

                  warum?
                  weil XML in allen sprachen implementiert ist und man braucht nicht mehr viel sorgen um die schnittstellen-programmierung zu machen.
                  dabei vergisst man schnell, dass die oben gezeichnete xml-struktur sich ganz einfach in eine csv-datei gepackt sein kann, und damit können alle bekante Programmiersprachen wunderbar umgehen.

                  Ich habe vor kurzem der "najax"-Projekt angeschaut, und mich ein wenig mit dem code auseinander gesetzt. Ich war begeistert! Die haben sich klare ziehle gesetzt, eine Anwendung, die mit javascript und PHP funktioniert, zu programmieren. Sie haben sich die mühe gegeben javascript-objecte zu serialisieren und zwar so, dass PHP es versteht und mit einfachem unserialize zu einem object wieder zusamen führen kann.
                  Mein Respekt!
                  die andere versuhen das immer noch mit XML, da dieses Wort einfach magisch klingt, genau so wie Facktory und Singelton( hat man das ein mal gelernt, versucht man das überall ohne rücksicht reinhauen)

                  DOM(document object model)
                  wird immer in verbindung mit xml und html gebracht, aber das stimmt gar nicht.
                  ein document könnte auch so aussehen:
                  --------------
                  style
                  red:ab_zeichen 7 bis 20
                  blau:1-6, 30-70,
                  fett:1-50
                  ---------------------
                  content
                  halo welt blja blja blja und so weiter
                  -----------------------

                  und bei diesem document ist layout von content getrennt wie XSL von XML, und dazu könnte es noch gezipt und sogar verschlüsselt werden als auch besser für die online-übertragung und parsen zu sein.
                  Aber aus historischen grunden lesen unsere Browser immer noch in html und XML format, obwohl es andere Methoden gibt eine programm zum darstellung von fettem schrift zu zwingen.

                  ich bitte alle meine rechtsschreibung zu ignorieren und mein Beitrag am bestens auch, da wir genau wie XML und XSL inhalt von darstellung trennt, unsere Meinung von Arbeit trennen müssen.

                  Slava
                  bituniverse.com

                  Kommentar


                  • #10
                    Sorry, aber du hast absolut den Sinn hinter XML nicht verstanden. Natürlich geht alles auf vielen Wegen, aber eine hingeklatsche CVS-Datei kommt bei weitem nicht an eine gut durchdachte XML-Datei ran. Außer acht lassen, will ich dabei mal das Escapen von Zeichen (was passiert, wenn in der CVS-Datei mal in der Spalte ein Komma drin ist? Gleiches mit Leerzeichen? Dann hat man schon ein Problem, durch XML und Entities kein Problem).
                    Vom Ersetzen einer DB durch XML spricht hier doch niemand, dass man das vorliegende Problem hochperformant mit einer automatisch geschriebenen PHP-Datei lösen könnte, sei mal einfach in den Raum geworfen.
                    Dass preg_match wirklich schneller sein soll als die XML-Implementation mag sein, aber die XML-API ist wesentlich einfacher zu benutzen, Dinge die zwar per Regex lösbar sind, deren Entwicklungszeit dann aber in einem nicht mehr akzeptablen Bereich liegt.
                    Das Zend-Framework hat die Serialisierung über JSON gelöst, ist auch recht hübsch, wenn man aber bedenkt, dass AJAX auf eine XML-setzende Struktur aufbaut, lässt sich schon erahnen, dass alles was nicht XML ist und über die Leitung geschoben wird, ein Missbrauch des Standards ist. Ich warte praktisch nur darauf, bis irgendwann sich alle Welt darüber aufregt, dass da nicht-XML-Daten über die Leitung gehen... wird kommen, bin ich mir fast sicher

                    Und du hast auch noch nicht den Sinn von semantischem Markup verstanden, oder? Es geht dabei darum Struktur in die Flut von Informationen zu bringen, deshalb wird ja auch jedes neue Layout per CSS gemacht. Content von Style trennen. Dein hingeklatschter Text unter die Style-Angaben wirkt dem perfekt entgegen; keine Maschine kann erahnen was wo wie irgendwie ist. Während bei einer Tabelle, weiß jede Maschine "ha, tabellarische Daten", gleiches gilt für Überschriften etc.
                    Zum Beispiel die microsummaries, die neue Spielerei des Firefox2, basiert sehr auf semantischem Markup, gleiches gilt für Suchmaschinen.
                    Es geht bei allem um Struktur, um die Mengen an Informationen irgendwie so aufzuwerten und nicht einfach nur eine pure Masse an Text zurück zu lassen...

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar


                    • #11
                      .... ein sehr schöner beitrag!!!!

                      wann ist XML interesant?
                      nur dann, wenn man die verschahtelte daten an eine andere Programm übergeben muss.

                      warum?
                      weil XML in allen sprachen implementiert ist und man braucht nicht mehr viel sorgen um die schnittstellen-programmierung zu machen.
                      RIGHT! und dann doch am besten auch bitte mit xslt... zumindest in webumgebungen

                      so, nu wartet privatleben. ihr seid ja immer noch hier... und nicht vergessen... abschalten!!!
                      **********
                      arkos
                      **********

                      Kommentar


                      • #12
                        OffTopic:
                        ghostgambler: richtig. und noch ein hint: die lustigen text-dateien sind "comma separated values", nicht "concurrent versions system".

                        Kommentar


                        • #13
                          Original geschrieben von Slava
                          XML?
                          eine datenbank-system für die Armen.
                          es gibt nichts, was XML besser als DB machen könnte
                          Doch, m.E. eine ganze Menge.
                          wann ist XML interesant?
                          nur dann, wenn man die verschahtelte daten an eine andere Programm übergeben muss.
                          Das zum Beispiel ...
                          dabei vergisst man schnell, dass die oben gezeichnete xml-struktur sich ganz einfach in eine csv-datei gepackt sein kann, und damit können alle bekante Programmiersprachen wunderbar umgehen.
                          Versteife dich doch jetzt nicht auf ein Minimalbeispiel.

                          Verschachtelte Strukturen bildest du in CSV sicher nicht so einfach und gut verarbeitbar ab.
                          Außerdem kann ich über DTD- und Schema-Validierung Daten im XML-Format gut auf korrekten Aufbau prüfen - wie sollte CSV das leisten ...?
                          DOM(document object model)
                          wird immer in verbindung mit xml und html gebracht, aber das stimmt gar nicht.
                          ein document könnte auch so aussehen:
                          --------------
                          style
                          red:ab_zeichen 7 bis 20
                          blau:1-6, 30-70,
                          fett:1-50
                          ---------------------
                          content
                          halo welt blja blja blja und so weiter
                          -----------------------

                          und bei diesem document ist layout von content getrennt wie XSL von XML,
                          Quark.

                          Dein Beispiel-"Dokument" besitzt überhaupt keine Struktur, die von irgendwas zu trennen wäre - das ist allerhöchstens plain text.

                          Und sowas wie
                          red:ab_zeichen 7 bis 20
                          blau:1-6, 30-70,
                          fett:1-50
                          wird doch spätestens dann zum PITA, wenn die Inhalte nicht statisch sind, sondern dynamisch aus anderen Quellen kommen.

                          <h1>...</h1> kann ich immer bequem in blau und kursiv formatieren, egal wie viel Inhalt drinsteht.

                          Wenn du aber deine "von-bis"-Styles sowohl für den Text "abc" als auch für "fkdh dgfkr arfrt" jeweils dynamisch anpassen willst ...


                          und dazu könnte es noch gezipt und sogar verschlüsselt werden
                          XML ist Text, und Text lässt sich meistens ziemlich gut komprimieren.
                          als auch besser für die online-übertragung und parsen zu sein.
                          Was willst du an plain text parsen ...?
                          Aber aus historischen grunden lesen unsere Browser immer noch in html und XML format, obwohl es andere Methoden gibt eine programm zum darstellung von fettem schrift zu zwingen.
                          Es geht nicht darum, irgendein Programm zur Darstellung von fetter Schrift zu bringen - sondern darum, Daten logisch und strukturiert auszuzeichnen.
                          ich bitte alle meine rechtsschreibung zu ignorieren und mein Beitrag am bestens auch, da wir genau wie XML und XSL inhalt von darstellung trennt, unsere Meinung von Arbeit trennen müssen.

                          Vermutung: Du hast getrunken, und willst ein bisschen trollen ...?
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Original geschrieben von ghostgambler
                            Sorry, aber du hast absolut den Sinn hinter XML nicht verstanden. Natürlich geht alles auf vielen Wegen, aber eine hingeklatsche CVS-Datei kommt bei weitem nicht an eine gut durchdachte XML-Datei ran. Außer acht lassen, will ich dabei mal das Escapen von Zeichen (was passiert, wenn in der CVS-Datei mal in der Spalte ein Komma drin ist? Gleiches mit Leerzeichen?
                            Dann hat man schon ein Problem, durch XML und Entities kein Problem).
                            1) was spricht gegen einem mehrdemensionalem array egal ob er serialisiert oder in anderem zustand ist?
                            intern ist DOM-object eigentilich dasselbe, nur hat ein paar zusätzliche Methoden.
                            Du kannst auch mal zum testzwecke ein geparste DOM-object serialisieren, und dann vergleichen was schneller ist ein DOM-object mit unserialize oder bei parsen von XML-datei zu erzeugen.
                            dann gibt es eine frage, wenn du die gewonene daten sowieso in deiner anwendung benutzen muss und nur für interne zwecke brauchst, muss man wirklich das alles als XML abspeichern?

                            2)zum "," in csv
                            wenn in einer XML datei ein ersatz für < und > gefunden worden, dann schafen wir auch ein ersatz für komma in text zufinden.


                            Vom Ersetzen einer DB durch XML spricht hier doch niemand, dass man das vorliegende Problem hochperformant mit einer automatisch geschriebenen PHP-Datei lösen könnte, sei mal einfach in den Raum geworfen.
                            Dass preg_match wirklich schneller sein soll als die XML-Implementation mag sein, aber die XML-API ist wesentlich einfacher zu benutzen, Dinge die zwar per Regex lösbar sind, deren Entwicklungszeit dann aber in einem nicht mehr akzeptablen Bereich liegt.
                            ich sage nicht, dass wenn es doch zum parsen von XML kommen muss immer pregmatch zu benutzen.
                            wenn es mit DOM einfacher geht, dann würde ich auch DOM nehmen.
                            aber bei manchen aufgaben lässt sich problem schnell erkennen, und wenn es mit preg_match schneller und einfacher ist, warum muss ich dann DOM benutzen.
                            Bei dem XML, dass wir in erstem Beitrag haben, wenn er nicht unbedingt die höhste id gebraucht hat, dann würde ich auch in keinem fall preg_match benutzen sondern direckt mit einem einzigem str_replace alles erlädigen und die ganze code in 2 zeilen packen.

                            Das Zend-Framework hat die Serialisierung über JSON gelöst, ist auch recht hübsch, wenn man aber bedenkt, dass AJAX auf eine XML-setzende Struktur aufbaut, lässt sich schon erahnen, dass alles was nicht XML ist und über die Leitung geschoben wird, ein Missbrauch des Standards ist. Ich warte praktisch nur darauf, bis irgendwann sich alle Welt darüber aufregt, dass da nicht-XML-Daten über die Leitung gehen... wird kommen, bin ich mir fast sicher
                            Das Zend-Framework hat die Serialisierung über JSON gelöst ist richtig, da sie ihre software auch als schnelle und vernünftige lösung anbieten wollen.
                            dass AJAX auf XML setzt kann ich leider nur wiedersprechen.
                            weil:
                            bei XMLHttpRequest() von Mozila als auch
                            bei ActiveXObject( "Microsoft.XMLHTTP" ) von Microsoft
                            die methode .responseText vorhanden ist

                            Und du hast auch noch nicht den Sinn von semantischem Markup verstanden, oder? Es geht dabei darum Struktur in die Flut von Informationen zu bringen, deshalb wird ja auch jedes neue Layout per CSS gemacht. Content von Style trennen. Dein hingeklatschter Text unter die Style-Angaben wirkt dem perfekt entgegen; keine Maschine kann erahnen was wo wie irgendwie ist. Während bei einer Tabelle, weiß jede Maschine "ha, tabellarische Daten", gleiches gilt für Überschriften etc.
                            ich habe doch der Sinn von semantischem Markup verstanden, und beobachte auch die Entwicklung in diese richtung.
                            Aber ich kann z.b.s die Aussage, dass die Maschienen xml und Tabellen besser erkennen können als ein andere Parser mechanismus, finde ich nicht richtig.
                            Das passt gut zu einem Mensch aber nicht zu einer Maschine, und dass die maschiene die zeichen von 20 bist 30 rot machen muss, wird sie schneller bewältigen, als wenn sie zuerst der zeichen 20 und 30 in einem aufwändigem prozess zuerst finden muss.
                            Spass halber können wir sogar ein Experement programmieren.
                            Du machst ein XML parser, und ich eine ganz andere documenten-strucktur
                            und vergleichen was schneller funktioniert.
                            Zum Beispiel die microsummaries, die neue Spielerei des Firefox2, basiert sehr auf semantischem Markup, gleiches gilt für Suchmaschinen.
                            Es geht bei allem um Struktur, um die Mengen an Informationen irgendwie so aufzuwerten und nicht einfach nur eine pure Masse an Text zurück zu lassen...
                            ich sage nicht, dass XML unbrauchbar ist, aber ich glaube nicht, dass es als einzig wahre lösung zu betrachten ist.
                            optimale einsatz für XML ist meine Meinung nach gut von @arkos beschrieben worden:
                            zusamen mit XSL an die Browser senden, da der Browser es haben will.

                            Ich danke in jedem Fall alle für eure Meinung, die auch bestimmt ein einflüss auf mich hinterlassen wird
                            Slava
                            bituniverse.com

                            Kommentar


                            • #15
                              Original geschrieben von Slava Spass halber können wir sogar ein Experement programmieren.
                              Du machst ein XML parser, und ich eine ganz andere documenten-strucktur
                              und vergleichen was schneller funktioniert.
                              um schnelligkeit geht es hier eigentlich nicht, wie ghostgambler schon eingangs geschrieben hatte.

                              ich stelle mir deinen ansatz gerade in html vor (untermenge von xml):

                              style-csv:
                              zeichen 5-12 -> h1
                              zeichen 8-11 -> b
                              zeichen 20-25 -> font-color: red
                              ... usw.

                              und dann plaintext-"html" ohne markups und struktur - ohne style-csv völlig wertlos.
                              im texteditor auch nicht durch einen menschen zu bearbeiten... etc.

                              Kommentar

                              Lädt...
                              X