XML in mysql schreiben

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

  • XML in mysql schreiben

    Hi,

    bräuchte weitere hilfestellung.
    Ich habe eine XML Datei und muss diese in eine mysql db schreiben

    XML sieht wie folgt aus

    <?xml version="1.0" encoding="UTF-8"?><feed><FeedName>All Stock. 70021 DS.</FeedName>

    <DS>
    <Name>Wächter</Name>
    <Vorname>Hans</Vorname>
    <Stadt>Berlin</Stadt>
    </DS>


    wie kann ich nun in die mysql Datenbank schreiben, so dass NAME vom XML in das DBFeld Name geschrieben wird. Ebenso für Vorname und Stadt.
    THX

  • #2
    Da ich mich mit den xmlKlassen von php nicht so auskenne würde ich einen RegExp vorschlagen
    PHP-Code:
    $reg '/<Name>([^<]*)<\\\/Name>.*<Vorname>([^<]*)<\\\/Vorname>.*<Stadt>([^<]*)<\\\/Stadt>/isU';
    preg_match($reg,$text,$arr);
    $sql "INSERT INTO tabelle (name,vorname,stadt) VALUES({$arr[1]},{$arr[2]},{$arr[3]})"
    Probiers mal in diese Richtung

    Gruss

    tobi
    EDIT:

    kleine Änderung am RegExp und Link zum Testen

    Zuletzt geändert von jahlives; 21.02.2007, 12:29.
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Wenn PHP 5.2 installiert ist ist SimpleXML die schnellere und einfachere Lösung, um die Daten aus dem XML auszulesen.
      Das schreiben in die DB sollte dann kein Problem mehr sein.
      it's not a bug,
      it's a feature!

      Kommentar


      • #4
        hallo,

        also in sachen parsen bin ich schon ein stück weiter

        Code:
        <?php
        function startElement($parser, $element_name, $element_attribute) {
        global $ausgabe;
        //Umwandeln in Kleinbuchstaben
        $element_name = strtolower($element_name);
        //Überprüfung des Elementnames
        if ($element_name=="artist") {
        $ausgabe .= "<h3>Inhalt</h3><p>";
        }
        if ($element_name=="title") {
        $ausgabe .= "<h3>title</h3><p>";
        }
        }
        
        function endElement($parser, $element_name) {
        global $ausgabe;
        // in Kleinbuchstaben umwandeln
        $element_name = strtolower($element_name);
        // Überprüfung des Names eines Elementes
        if ($element_name=="artist") {
        $ausgabe .= "</p>";
        }
        if ($element_name=="title") {
        $ausgabe .= "</p>";
        }
        }
        
        function cdata($parser, $element_Artist) {
        global $ausgabe;
        // Der normale Text wird an $ausgabe angehängt
        $ausgabe .= $element_Artist;
        }
        $xmlFile = file("test.xml");
        $parser = xml_parser_create();
        xml_set_element_handler($parser, "startElement", "endElement");
        xml_set_character_data_handler($parser, "cdata");
        
        foreach($xmlFile as $elem)
        {
        xml_parse($parser, $elem);
        }
        xml_parser_free($parser);
        echo $ausgabe;
        ?>

        ausgegeben wir das ganze schön strukturiert artist und titel, doch ziel ist es ja das ganz nicht auszugeben sondern in eine db entsprechend der felder zu schreiben. leider habe ich diese php kenntnisse nicht...
        danke für hilfe

        Kommentar


        • #5
          leider habe ich diese php kenntnisse nicht...
          und wo hakt es bei dir?

          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            naja, anstatt echo $ausgabe soll das ganze in die tabelle X feld artist von dem xml stream aus $element_name=="artist" geschrieben werden. k.a. wie das funktioniert

            Kommentar


            • #7
              du weist aber schon, dass in deinem xml-dokument (s. beispiel) kein artist- oder title-element vorhanden ist

              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Was spricht eigentlich gegen den RegExp ? Wenn ich sehe wieviel Code da sonst produziert wird, finde ich einen Einzeiler eigentlich angenehmer...

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Original geschrieben von jahlives
                  Was spricht eigentlich gegen den RegExp ? Wenn ich sehe wieviel Code da sonst produziert wird, finde ich einen Einzeiler eigentlich angenehmer...
                  Zeig mir einen einfachen RegEx, der bspw. mit
                  Code:
                  <element><![CDATA[Dieses <element> sollte mit </element> geschlossen werden]]></element>
                  umgehen kann ...
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    du weist aber schon, dass in deinem xml-dokument (s. beispiel) kein artist- oder title-element vorhanden ist
                    jaja das weiß ich, das xml wird jetzt auch genau so asugegeben wie ich es mir wünsche nur das ganze in eine db zu schreiben schaffe ich nicht

                    Kommentar


                    • #11
                      Original geschrieben von iberican
                      nur das ganze in eine db zu schreiben schaffe ich nicht
                      Dann zeig wenigstens deinen Ansatz.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Sieh dir doch mal den Artikel von Dr. Web zu SimpleXML hier an.
                        Dann such dir ein Tutorial (evtl. das von Kropff) wo Datenbankzugriffe mit PHP erklärt werden.
                        it's not a bug,
                        it's a feature!

                        Kommentar


                        • #13
                          die frage die ich mir gerade stelle ist, ob ich denn überhaupt php brauche und nicht direkt über mysql importieren kann?

                          Kommentar


                          • #14
                            Original geschrieben von iberican
                            die frage die ich mir gerade stelle ist, ob ich denn überhaupt php brauche und nicht direkt über mysql importieren kann?
                            imho nein. du brauchst php, um das dokument zu parsen und zu verarbeiten.

                            gruß
                            peter
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              ok bin nun auch etwas weiter,

                              anstatt die inhalte der variable auszugeben mit echo müsste ich die ja auch in die db schreiben können mit

                              $eintrag = "INSERT INTO tabelle (
                              artist, title) VALUES ('$ausgabe', '$ausgabezwei')";

                              $eintragen = mysql_query($eintrag);

                              das problem ist, dass ich nur eine variable auslesen kann

                              function cdata($parser, $element_Title; ) {
                              global $ausgabe;
                              // Der normale Text wird an $ausgabe angehängt
                              $ausgabe .= $element_Title;
                              $ausgabezwei .= $element_Artist
                              }

                              hier bekomme ich dann die fehlermeldung
                              Warning: Missing argument 3 for cdata()

                              sobald ich $element_Artist entferne geht es wieder. darf ich hier denn keine weitere variable einfügen?

                              Kommentar

                              Lädt...
                              X