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

  • bish
    hat ein Thema erstellt [Erledigt] Parsen mit DOM - Links auslesen.

    [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 :/

  • nikosch
    antwortet
    Gerne. Ist leider etwas komplexer, weil DOM alle als Objektknoten aufschlüsselt.

    Einen Kommentar schreiben:


  • bish
    antwortet
    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

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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

    Einen Kommentar schreiben:


  • bish
    antwortet
    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...

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • bish
    antwortet
    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.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • bish
    antwortet
    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 :/

    Einen Kommentar schreiben:


  • lstegelitz
    antwortet
    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.

    Einen Kommentar schreiben:


  • bish
    antwortet
    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?

    Einen Kommentar schreiben:


  • chorn
    antwortet
    DOMDocument::getElementsByTagName
    DomDocument->get_elements_by_tagname

    such dir was aus.

    Einen Kommentar schreiben:

Lädt...
X