Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mittels DOM XML auslesen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Mittels DOM XML auslesen

    Moin.

    Ich kriege einen Fehler bei folgenden zeilen:
    PHP-Code:
    $doc = new DOMDocument();
           
    $doc->load("upload/".$newFileName); 
    Warning: domdocument::domdocument() expects at least 1 parameter, 0 given in D:\xampp\htdocs\backend.php on line 40

    Fatal error: Call to undefined method domdocument::load() in D:\xampp\htdocs\backend.php on line 41


    Die Sache ist die, Dem Benutzer der Seite soll erlaub werden die XML hoch zu laden. Anscheinend kriegt er die Datei nicht richtig übergeben. Muss ich da mit realpath() arbeiten? Wenn ja, wie?

    besten dank im voraus.

  • #2
    Fortsetzung von http://www.php.de/php-einsteiger/532...speichern.html

    Zitat von David
    Ja, Du musst erstmal die domxml-Erweiterung wieder rausschmeissen.
    Also wieder das Semikolon vor exteion=php_domxml.dll in der php.ini setzen und stattdessen php_dom.dll einbinden.

    Kommentar


    • #3
      darf ich die extension manuell einbinden? weil die php_dom.dll ist bei mir in der ini nicht vorhanden...
      ist simplexml denn auch verkehrt bzw. veraltet?
      damit klappt es auch einigermaßen. Und langsam scheine ich da endlich durch zu steigen. Nur Fragen habe ich immer noch :/

      Kommentar


      • #4
        SimpleXML ist eine php5-Erweiterung. Wenn Dir der Leistungsumfang ausreicht, kannst Du es sicher verwenden.
        Vielleicht ist php-dom bei Dir auch schon fest einkompiliert. Versuch es doch einfach. domxml raus, Testskript starten.

        Kommentar


        • #5
          Ok danke für den tip. Jetzt funktioniert es.
          llerdings kriege ich folgenden Fehler:
          Fatal error: Call to undefined method DOMNodeList::nodeValue()

          Code:
          PHP-Code:
          $doc = new DOMDocument();
                          
          $doc->load("upload/".$newFileName);
                          
                          
          $seminar $doc->getElementsByTagName("Seminar");
                          
                          foreach (
          $seminar as $value)
                          {
                              
          $titels $value->getElementsByTagName("Semtitel1");
                              
          $value $titels->nodeValue();
                              echo 
          $value;
                          } 

          EDIT:
          Hab gesehen was flasch war.
          Neuer Fehler:
          Fatal error: Call to a member function nodeValue() on a non-objec

          PHP-Code:
          foreach ($seminar as $value)
                          {
                              
          $titels $value->getElementsByTagName("Semtitel1");
                              
          $value $titel1->nodeValue();
                              echo 
          $value;
                          } 

          Kommentar


          • #6
            $titels = $value->getElementsByTagName("Semtitel1");
            $value = $titel1->nodeValue();

            Kommentar


            • #7
              wenn du dir den Qt dadrüber anguckst, hatte ich beides mit dem selben namen versehen.
              $titels = $value->getElementsByTagName("Semtitel1");
              $value = $titels->nodeValue();
              dann hatte ich folgenden Fehler:
              Fatal error: Call to undefined method DOMNodeList::nodeValue()
              bezogen auf die line:
              $value = $titels->nodeValue();

              Kommentar


              • #8
                Und was wolltest Du mit der Änderung erreichen? Ich meine, Du wirst Dir dabei doch etwas gedacht haben, oder?

                Kommentar


                • #9
                  eigentlich hast du ja recht. in der Variabel $titels stehen jetzt alle tags drine. und von dennen will ich ja die nodeValue() haben. Allerdings versteh ich nciht, wieso er mir dann denn Fehler wirft?
                  mal ne Frage nebenbei, kann man das nicht irgendwie in einer for schleife abwickeln?

                  Kommentar


                  • #10
                    Weil DOMNodeList eben keine Methode nodeValue() definiert. Es ist kein Node, es ist eine Liste von Nodes.
                    Genauso wie $seminar kein Node ist, sondern eine Liste von Nodes.

                    Kommentar


                    • #11
                      Wie kann ich den dann der liste($seminar [ist das so was ähnliches wie ein Vector in Java?])
                      sagen, dass ich in da wo das erste mal der Tag "Semtitel1" auftaucht, den Wert brauche, der dazsichen hängt und denn ganz gerne in meiner DB haben will.
                      PHP-Code:
                      for ($i 0$i sizeof($seminar); $i++)
                                      {
                                          
                      $titels $seminar->getElementsByTagName("Semtitel1");
                                          echo 
                      $titels[$i];
                                      } 
                      SO?

                      bevor du ausrastet mit mir guck ich mir mla erstmal die methoden von der DOMNodeList an in der API.
                      weil selbst is der mann ja irgendwie
                      und das ich die im eben geposteten code nicht in die db kirege, wegen fehlendem query is mir auch klar^^

                      Kommentar


                      • #12
                        $seminar = $doc->getElementsByTagName("Seminar");
                        $seminar ist eine Liste (ja, so ähnlich wie ein Vector in Java, ehere wie eine Liste in Java) von Nodes. Deshalb verwendest Du
                        foreach ($seminar as $value)
                        um die Liste durchzugehen und bei jedem Schleifendurchlauf genau ein <seminar> Element durch $value repräsentiert zu haben.
                        $titels = $value->getElementsByTagName("Semtitel1");
                        $titles ist eine Liste von Nodes. Deshalb verwendest Du ...

                        Kommentar


                        • #13
                          Also ich habs nu.
                          Ich kriege genau den ertsen tag komplett ausgelesen.
                          Allerdings liest er die umlaute in der tabelle komsich aus. muss ich da mit utf8_decode arbeiten?
                          PHP-Code:
                          $doc = new DOMDocument();
                                          
                          $doc->load("upload/".$newFileName);
                                          
                                          
                          $items $doc->getElementsByTagName("Seminar");

                                          for (
                          $i 0$i sizeof($items); $i++)
                                          {
                                              echo 
                          $items->item($i)->nodeValue."\n";
                                          } 

                          Kommentar


                          • #14
                            Kommt auf die charsets an, die Du bei/für MySQL eingestellt hast. Vor allem auf den Zeichensatz der MySQL-Verbindung.
                            Wenn Du daran nichts umgestellt hast, ist es mit großer Sicherheit latin1 und, ja, dann hilft Dir zum beispiel utf8_decode weiter.

                            Kommentar


                            • #15
                              Also in der MySQl stehen sie bei mir als utf8_general_ci
                              Und hej was ich mal so am rande erwähnen wollte.
                              Bist echt Klasse! *schleim*

                              Kommentar

                              Lädt...
                              X