Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Parsen mit DOM - Links auslesen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Parsen mit DOM - Links auslesen

    Hallo,
    ich würde gerne wissen, ob es möglich ist, wenn man mit DOM HTML parst, auch die Links von Tabellenspalten auszulesen.

    Code:
    Tablle (vereinfacht)
    
    ...
    <tr>
      <td>
        <a href="linkzurseite">Text des Links</a>
      </td>
    </tr>
    Zum jetzigen Zeitpunkt gibt mir DOM nämlich nur den "Text des Links" zurück (irgendwie ja auch richtig, weil Inhalt der Spalte). Aber ich würde auch gerne den Link haben.

    Kann mir da jemand einen Tip geben wie das geht? Suchfunktion hier mit Stichworten "DOM und Links" hat 250 Treffer ergeben von denen die ersten 50 nix annähernd damit zu tun hatten :/


  • #2
    DOMDocument::getElementsByTagName
    DomDocument->get_elements_by_tagname

    such dir was aus.
    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

    Kommentar


    • #3
      Zitat von chorn Beitrag anzeigen
      DOMDocument::getElementsByTagName
      DomDocument->get_elements_by_tagname

      such dir was aus.

      Wenn ich

      Code:
      $links = $row->getElementsByTagName('a');
      verwende (also gleicher aufbau wie mit 'td') dann erhalte ich nicht den Link sondern wieder nur den Text des Links.

      Soll heißen. Wenn folgendes meine Tabelle ist:

      Code:
      <tr>
        <td>
          <a href="linkzurseite">Text des Links</a>
        </td>
        <td>
          Zweite Spalte
        </td>
      </tr>
      Dann liefert mir:

      Code:
      $cols = $row->getElementsByTagName('td');
      zwei Items: "Text des Links" und "Zweite Spalte"

      während mir

      Code:
      $links = $row->getElementsByTagName('a');
      ein Item mit "Text des Links" ergibt.

      Wo ist mein (Denk-?)Fehler?

      Kommentar


      • #4
        Wieso Denkfehler?

        Suche nach Tag <a> trifft den einen Link, die Suche nach dem Tag <td> findet beide Spalten der Tabelle. Sieht für mich perfekt richtig aus...

        Was du haben willst, sind die INHALTE von <td> Tags, die ein <a> enthalten.. das ist aber nicht über getElementsByTagName alleine zu erreichen.
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Ja, aber ich will nicht "Text des Links" sondern den Link selber, also die URL. Und die wird sowohl bei 'td' wie auch bei 'a' nicht mitgeliefert :/

          Kommentar


          • #6
            Wenn ich
            ..
            verwende (also gleicher aufbau wie mit 'td') dann erhalte ich nicht den Link sondern wieder nur den Text des Links
            Das stimmt nicht. DIe Funktion liefert sehr wohl ein Objekt. Vermutlich versuchst DU nur, das direkt auszugeben und dann wird eine Typkonvertierung zu String vorgenommen. Mit var_dump dürftest Du sehen, dass Du durchaus noch ein Element (z.B. DOMNodeList) hast.
            --

            „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


            • #7
              Zitat von nikosch Beitrag anzeigen
              Das stimmt nicht. DIe Funktion liefert sehr wohl ein Objekt. Vermutlich versuchst DU nur, das direkt auszugeben und dann wird eine Typkonvertierung zu String vorgenommen. Mit var_dump dürftest Du sehen, dass Du durchaus noch ein Element (z.B. DOMNodeList) hast.
              Ja es ist ein DOMNodeList Objekt keine Frage. Dennoch enthält das Item den (für mich) falschen Inhalten:

              Code:
              var_dump($links->item(0)->nodeValue);
              Da sollte nach meinem Verständnis die URL drin sein und nicht der Text des Links (item(1)) gibt es (verständlicherweise) nicht.

              Kommentar


              • #8
                Naja, das ist aber eine große Überraschung, wenn Du auf nodeValue zugreifst!! item(0) ist bereits das Objekt! Wenn Du ein Attribut brauchst (href z.B.) dann musst Du eben auch auf die Attribute zugreifen.

                Bitte Nachhilfe zum Thema DOM in Anspruch nehmen. Es ist klar definiert, was nodeValue, textContent, childNodes etc. bedeuten. Steht auch alles im Manual.
                --

                „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


                • #9
                  Sry wenn ich dumme Fragen stelle, aber jetzt verwirrt mich die Kombination aus deinem Post und dem phpmanual.

                  Also nodeValue ist falsch, ich muss auf die Attribute. Soweit hab ichs verstanden. Hab jetzt alle Funktionen ausprobiert, die im manual stehen, aber entweder habe ich doch kein NodeList Objekt (wovon ich aber nicht ausgehe, warum var_dump da was falsches anzeigen sollte) oder ich bin einfach zu blöd. Habe neben NodeList Funktionen das hier ausprobiert:

                  DomAttribute->value
                  DomElement->get_attribute_node
                  DomElement->get_attribute
                  DomNode->attributes

                  Wäre für eine Hilfe dankbar, wie ich jetzt an die URl komme bzw. wie genau ich jetzt auf das Attribut href (wo dann hoffentlich, keine Ahnung) die URL drin steht.

                  Weil derzeit heißt das Ergebnis, egal welcher der Attributsfunktionen ich ausprobiere immer
                  Code:
                  Call to undefined method...

                  Kommentar


                  • #10
                    DOMNodeList ist eine (wer hätte es gedacht) Liste von DOMNode-Objekten
                    über item(index) bekommst Du das entspr. DOMNode-Objekt

                    DOMNode kapselt ein Node eines Dokumentbaums. Also ein DOM-Element und dessen Text- bzw. XML-Substruktur-Inhalt. Das liefert $myDOMNode->nodeValue

                    $myDOMNode->attributes enthält eine DOMNamedNodeMap, wie Du die ausliest steht im Manual: [MAN]DOMNamedNodeMap[/MAN]

                    Oder Du benutzt gleich ->getAttribute() oder ähnliches aus dem Fundus des DOMElement, denn DOMNode ist auch gleichzeitig ein DOMElement
                    --

                    „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


                    • #11
                      Sry war essen, daher keine Antwort.


                      Danke jetzt hab ichs hinbekommen

                      Code:
                      var_dump($links->item(0)->attributes->getNamedItem('href')->nodeValue);
                      Das kann ich jetzt bearbeiten, danke

                      Kommentar


                      • #12
                        Gerne. Ist leider etwas komplexer, weil DOM alle als Objektknoten aufschlüsselt.
                        --

                        „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

                        Lädt...
                        X