Schreibe in XML-Datei

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

  • Schreibe in XML-Datei

    Moin,

    @Mods: Ich weiß es gibt ein extra XML-Forum, mein Problem hat aber eher nichts mit XML zu tun, sondern ich will ja nur in eine Datei schreiben.

    Folgendes Problem:
    Ich will Formulardaten in eine XML-Datei schreiben. Diese ist so aufgebaut:
    <data>
    <item>
    <name>
    Test</name>
    <zahl>14</zahl>
    </item>
    </data>
    Jetzt sollen durch das Formular neue <item>-Objekte in die Datei eingefügt werden. Bloß kann ich die Daten nicht einfach hinten an die Datei anhängen, sondern muss den <item>-Tag ja noch vor das </data>-Tag schreiben da der Block ja sonst ungültig ist. Ich müsste also vor die vorletzte Zeile schreiben, hat jemand ne Idee dazu?

    Danke schonmal,

  • #2
    Wenn es immer die vorletzte Zeile ist, wo ist dann dein Problem?
    PHP-Code:
    $f file($filename);
    $f[count($f)-2] .= $deinXML."\n";
    file_put_contents($filename$f); 
    Sollte es nicht immer konstant die vorletzte Zeile sein, ist es wohl doch eher ein XML-Problem, denn dann würde ich die XML-Funktionen von PHP nutzen, um die Datei zu parsen und das neue Element einzubauen.

    Kommentar


    • #3
      Alles auslesen, am besten in ein Array oder wenn du PHP5 hast in ein simpleXML objekt, element einfügen, XML generieren und in Datei schreiben

      Kommentar


      • #4
        Danke onemorenerd,

        klappt wunderbar. Ich kannte bis jetzt nur fwrite.

        Kommentar


        • #5
          Beim Test ergab sich jetzt ein Problem:
          PHP4 kennt file_put_contents() nicht, hast du ne schnelle Lösung wie ich das unter PHP4 schreibe? Danke dir.

          Kommentar


          • #6
            fopen,fwrite,fclose??
            mfg

            Kommentar


            • #7
              Mein Problem ist es es in die vorletzte Zeile zu bekommen, so wie es der Code von onemorenerd macht. Bei fwrite wird alles hintenran geschrieben...

              Kommentar


              • #8
                von luke gesvchrieben
                Alles auslesen, am besten in ein Array oder wenn du PHP5 hast in ein simpleXML objekt, element einfügen, XML generieren und in Datei schreiben
                ich würde die variante mit simplexml auch bevorzugen, ist wohl das sauberste.

                ich habe eine ähnliche sache auch so gelöst.. hier das schnipsel daraus

                PHP-Code:
                $xml simplexml_load_file("xml/data.xml");
                    
                $entry $xml->addChild('entry');
                    
                $entry->addChild('name'strip_tags($_REQUEST['name']));
                    
                $entry->addChild('eintrag'strip_tags($_REQUEST['text']));
                    
                $entry->addchild('datum',date("d.m.Y",time()));
                    
                $res fopen("xml/data.xml","w");
                    
                fwrite($res,$xml->asXML());
                    
                fclose($res); 
                php5 vorausgesetzt!
                mfg

                Kommentar


                • #9
                  Wie ich grade oben schrieb, läuft der Server mit PHP 4.

                  Es muss doch also auch irgendwie anders nur mit Dateischreiben gehn.

                  Kommentar


                  • #10
                    file() erzeugt ein Array

                    Also hast du in $f[count($f)-2] die Vorletze Position.. Da fügst du mittels .= deinen neuen Datensatz ein.

                    (also wie gehabt)


                    PHP-Code:
                    $fh fopen("dateiname.xml","w");

                    foreach (
                    $f as $valuefwrite ($fh$value);

                    fclose($fh); 
                    ODER

                    PHP-Code:
                    // Check to see if functin exists
                    if (!function_exists('file_put_contents')) {

                        
                    // Define constants used by function, if not defined
                        
                    if (!defined('FILE_USE_INCLUDE_PATH')) define('FILE_USE_INCLUDE_PATH'1);
                        if (!
                    defined('FILE_APPEND'))           define('FILE_APPEND'8);
                        
                        
                    // Define function and arguments
                        
                    function file_put_contents($file, &$data$flags=0)
                        {
                            
                    // Varify arguments are correct types
                            
                    if (!is_string($file)) return(false);
                            if (!
                    is_string($data) && !is_array($data)) return(false);
                            if (!
                    is_int($flags)) return(false);
                            
                            
                    // Set the include path and mode for fopen
                            
                    $include false;
                            
                    $mode    'wb';
                            
                            
                    // If data in array type..
                            
                    if (is_array($data)) {
                                
                    // Make sure it's not multi-dimensional
                                
                    reset($data);
                                while (list(, 
                    $value) = each($data)) {
                                    if (
                    is_array($value)) return(false);
                                }
                                unset(
                    $value);
                                
                    reset($data);
                                
                    // Join the contents
                                
                    $data implode(''$data);
                            }
                            
                            
                    // Check for flags..
                            // If include path flag givin, set include path
                            
                    if ($flags&FILE_USE_INCLUDE_PATH$include true;
                            
                    // If append flag givin, set append mode
                            
                    if ($flags&FILE_APPEND$mode 'ab';
                            
                            
                    // Open the file with givin options
                            
                    if (!$handle = @fopen($file$mode$include)) return(false);
                            
                    // Write data to file
                            
                    if (($bytes fwrite($handle$data)) === false) return(false);
                            
                    // Close file
                            
                    fclose($handle);
                            
                            
                    // Return number of bytes written
                            
                    return($bytes);
                        }

                    gruss Chris

                    [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                    Kommentar


                    • #11
                      Moin, danke erstmal für deine Antwort. :-)

                      file() erzeugt ein Array Also hast du in $f[count($f)-2] die Vorletze Position.. Da fügst du mittels .= deinen neuen Datensatz ein. (also wie gehabt)
                      Sorry aber ich versteh das einfach, ist mir zu hoch, ich schaffe es nicht das umzusetzen. :-(

                      Kommentar


                      • #12
                        Ja dann lass' es doch ...
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Original geschrieben von wahsaga
                          Ja dann lass' es doch ...
                          Tut mir Leid wenn ich es nicht verstehe!?

                          Ich habe es mit
                          PHP-Code:
                                $fh fopen("data.xml","w");        $fh[count($fh)-2] .= $text."\n";        foreach ($f as $valuefwrite ($fh$value);        fclose($fh); 
                          probiert, es geht aber nicht...

                          Tschuldigung das ich ein Anfänger bin.

                          Kommentar


                          • #14
                            Ich empfehl dir immer noch die XML->Array->Einfügen->XML Variante. Schau mal auf http://www.phpclasses.org/ ob du ne schöne Klasse findest dessen Interface du verstehst, probier das XML in ein Array zu bekommen, gib es aus, versuch dem Array an der richtigen stelle was einzufügen, und dann mittels der Klasse das Array wieder als XML zu schreiben. Ich halte das für die beste Variante, XML in PHP4 ist nämlich nicht gerade das Anfängertauglichste... .

                            Kommentar


                            • #15
                              Ich hab es jetzt doch hinbekommen, danke an alle (wahsage ausgeschlossen) für ihre Hilfe und Tipps.

                              Kommentar

                              Lädt...
                              X