Ankündigung

Einklappen
Keine Ankündigung bisher.

DOMDocument

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

  • DOMDocument

    Hallo zusammen,

    ich bin neu hier und auf euch gestoßen, da auf der Suche nach ein bisschen Hilfe bei folgender Sache:

    Und zwar probiere ich gerade mit der DOMDocument Klasse herum. Ziel ist einfach mal eine Seite einlesen und ein paar Elemente als Liste ausgeben.

    Mein Code dazu ist folgender:

    PHP-Code:
        $doc = new DOMDocument();
        if (!@
    $doc->loadHTMLFile("test.html")) {
            echo 
    "existiert nicht\n";
            return;
        }
        
    $list $doc->getElementsByTagName("meta");

        
    var_dump($doc);
        
    var_dump($list); 
    Die Datei wird gefunden, jedoch sind beides leere Objekte:

    object(DOMDocument)#1 (0) {
    }

    object(DOMNodeList)#2 (0) {
    }

    Woran liegt das?

    Danke vorab

    Viele Grüße

    tadeus


  • #2
    Man kann diese nativen Objekte nicht listen lassen. Alles was die Doku beschreibt (bspw. http://de.php.net/manual/en/class.domdocument.php) existiert an Properties, wird aber nicht via Dump angezeigt. Das ist bei allen internen PHP-Objekten so.
    Die Knoten sind auslesbar, werden aber nicht angezeigt. (Ob das beim Lese/Schreibzugriff zur Laufzeit auf das XML wirkt entzieht sich meiner Kenntnis).
    Die Objekte sind also nicht wirklich leer. Du musst nur weiter auf Subelemente zugreifen. Über „textContent“ des DOMNode-Objektes kommst Du bspw. mal probeweise an ein paar Daten.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      OK, aber wenn ich an die Elemente will, bekomm ich auch nichts.

      PHP-Code:
          $doc = new DOMDocument(); 
          if (!@
      $doc->loadHTMLFile("test.html")) { 
              echo 
      "existiert nicht\n"
              return; 
          } 
          
      $list $doc->getElementsByTagName("meta"); 

          
      $count  $doc->length;
          
          for (
      $idx 0$idx $count$idx++) {
              print 
      $doc->item($idx)->nodeValue "\n";
          } 
      Edit:
      Ein $doc->saveHTMLFile("test2.html"); am Ende speichert mir aber wieder ein nettes HTML File mit dem selben Inhalt. Irgendwie greife ich falsch drauf zu, aber ich find den Fehler nicht.

      Kommentar


      • #4
        Vielleicht solltest Du Dir ein Element mit ausreichend Knoten aussuchen. $doc ($doc->length hat nur einen, den Root-Knoten. Vielleicht wolltest Du auch $list benutzen?

        PHP-Code:
        <?php

        $items 
        $doc->childNodes;

        foreach (
        $items as $item) {
            echo 
        $item->nodeValue "\n";
        }

        ?>
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Also ich hab nen Bot damit geschrieben:

          PHP-Code:
          $forms $doc->getElementsByTagName('form');
          foreach (
          $forms as $tag) {
          echo 
          $tag->getAttribute('action');
          echo 
          $tag->getAttribute('name');

          Das muss bei dir bzw mit jeden tag auch gehen wenn es die attribute hat

          Kommentar


          • #6
            Vielen Dank, das hat mich jetzt schon sehr weitergebracht.

            Wie sieht es eigentlich bei der Methode $doc->loadHTMLFile(); aus? Damit kann ich ja auch eine Adresse direkt aufrufen. Ist es möglich die Zeit bis es zu einem Timeout kommt zu verringern, also wenn z.B. mein Webserver ausgeschaltet ist.

            Kommentar


            • #7
              Naja mach doch einfach ne Überprüfung mit fsockopen ob deine Seite online ist, wenn ja dann machst du das LOADHTML

              Kommentar

              Lädt...
              X