Ankündigung

Einklappen
Keine Ankündigung bisher.

XML durch PHP in DB schreiben...

Einklappen

Neue Werbung 2019

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

  • XML durch PHP in DB schreiben...

    Guten Abend zusammen!

    Möchte Excel-Tabellen in die DB schreiben, speichere die .XLSs zunächst als .XML ab, da ich sonst teilweise Datenverlust habe (wieso auch immer, ist ja BISHER kein großer Umstand). Excel macht die XMLs nun leider ziemlich bullig durch die ganzen Zusatzinformationen und es wird FÜR MICH schwierig, an die Daten dran zu kommen, die ich letztenendes in meine DB schreiben will.
    Wie solch eine XML aussieht z.b. hier: 2shared - download testxml.xml

    Frage ist natürlich nun, wie ich schnell an die Cell-Tags und den Inhalt jener Knoten komme. Habe mich schon ins Manual hier eingelesen, bin leider nicht viel weitergekommen. Vielleicht würds auch SimpleXML tun, welches nun sinnvoller ist wisst Ihr ja vielleicht ebenfalls.

    Vielen Dank Euch,
    Gute Nacht


  • #2
    Probiers doch mit SimpleXML, das sollte ausreichen.

    Kommentar


    • #3
      Zitat von sandemann Beitrag anzeigen
      Excel macht die XMLs nun leider ziemlich bullig durch die ganzen Zusatzinformationen und es wird FÜR MICH schwierig, an die Daten dran zu kommen, die ich letztenendes in meine DB schreiben will.
      Wäre dann nicht CSV das geeignetere Format für diesen Datenaustausch ...?


      (Falls du die angesprochenen Probleme mit Datenverlust damit hattest - dann solltest du das vielleicht erst mal analysieren. Ich könnte mir vorstellen, dass sowas nur an einer Kleinigkeit wie Zeichenkodierung liegen könnte - denn CSV selbst ist eigentlich recht „robust“ und auch seitens MS schon lange genug im Einsatz, um da keine größeren Bugs mehr drin zu vermuten.)

      Kommentar


      • #4
        Vielen Dank euch beiden für die Tipps! Habs jetzt zwar hinbekommen, allerdings musste ich dann feststellen, dass die XML viel zu groß ist (33,1MB, eigentlich halb so wild, oder?): "Allowed memory size of 536870912 bytes exhausted (tried to allocate 40 bytes)" ... Mich wundert das ganze, da die allowed memoy size bei PHP5 standardmäßig 128M ist. Habs in der php.ini nochmal hochgesetzt, später dann auch nochmal die maximale bearbeitungszeit - es wird dann zwar länger gerechnet, das ergebnis ist das selbe.

        @ChrisB: CSV war in der Tat vorher das Format meiner Wahl, nur leider werden jedes mal aufs neue Daten zerschossen (beim "Speichern-unter" kann man ja nicht viel falsch machen). Nen anständigen Konverter zu finden ist nicht einfach, wahrscheinlich weil es die meisten immer direkt mit Excel machen.

        Gibt es noch irgendwelche Vorschläge was die XML-Sache angeht? Da es eigentlich funktioniert würde ich den gedanken gern beibehalten...

        Cheers!

        Kommentar


        • #5
          Bei großen Dateien empfiehlt es sich, nicht die ganze Datei zu laden, siehe XML Parser.

          PHP: XML Parser - Manual

          Kommentar


          • #6
            Zitat von leonv Beitrag anzeigen
            Bei großen Dateien empfiehlt es sich, nicht die ganze Datei zu laden, siehe XML Parser.

            PHP: XML Parser - Manual
            Danke Dir! Mit dem XML-Parser (SAX) ist das Datenvolumen jetzt schonmal kein problem mehr! Er iteriert nun also durch die ganze XML und gibt mir wirklich ALLES aus (also auch die ganzen Rudimente von Excel). Ich will aber nur die Zellendaten haben, das script soll nun also nur die <Data> tags ausgeben und nicht die ganzen zusatzinfos. Hat jemand einen Tipp? Stelle mir das momentan zwar recht leicht vor, komme aber trotzdem nicht weiter:P

            Hier mein Code:
            PHP-Code:
            <?php
            //start_element handler (wird ausgeführt, bevor das element gelesen wurde). HTML-Tags werden geöffnet.
            function element_start($parser$tag$attr) {
              if (
            $tag == 'Data') {
                echo 
            '<tr><td>';
              } else {
                echo 
            '';
              }
            }

            //end_element handler (wird ausgeführt, nachdem das element gelesen wurde). HTML-Tags werden geschlosssen.
            function element_end($parser$tag) {
              if (
            $tag == 'Data') {
                echo 
            '</td></tr>';
              } else {
                echo 
            '';
              }
            }

            //Character Data Handler-Funktion, wird jedes mal angewandt, wenn der parser über einen Text läuft.
            //Hier ist angegeben, was passiert, wenn Text gelesen wird.
            function element_cdata($parser$data) {
              echo 
            htmlspecialchars($data);
            }

            $parser xml_parser_create();    //Öffnet neuen parser namens $sax
            xml_parser_set_option($parserXML_OPTION_CASE_FOLDINGfalse);    //setzt dem parser die Option Case-Folding (uppercasing)
            xml_parser_set_option($parserXML_OPTION_SKIP_WHITE,true);    //Überspringt Blanks

            echo '<table border=1>';
            xml_set_element_handler($parser'element_start','element_end');    
            xml_set_character_data_handler($parser'element_cdata');
            xml_parse($parserfile_get_contents('porsche_neu_xml.xml'),true);
            xml_parser_free($parser);
            echo 
            '</table>';

            ?>
            Beispiel-XML immer noch hier

            Kommentar

            Lädt...
            X