Ankündigung

Einklappen
Keine Ankündigung bisher.

DOMDocument

Einklappen

Neue Werbung 2019

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.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    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";
        }

        ?>
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        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