XPATH vs DOM

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

  • #16
    Einen? ich habe mehrere versucht: Der vielversprechendste schien mir der hier zu sein, aber Irrtum. Kann es sein, dass es daran liegt, dass zwischen h1 und a Leerstellen sind?

    PHP-Code:
    foreach ($xPath->query('//h1/a') as $element
    {
         
    $hreft $element->getAttribute('href');
         
    $title $element->getAttribute('title'); 
    Die Irrtümer mit h1 als tagname brauche ich hier ja nicht noch mal aufzulisten.

    DAS hier war erfolgreich, soweit es class="bd" betrifft, aber mit h1 eben nicht.

    PHP-Code:
    foreach( $xpath->query('//div[contains(attribute::class, "bd")]') as $e ) { 

     echo 
    $e $e->nodeValue"<br />\n"
    Erfolglos war auch als Ergänzung zum eben Genannten (in der Absicht, den title von <a zu bekommen:

    PHP-Code:
    foreach( $xpath->query('//div[contains(attribute::class, "bd")]') as $e ) { 

    $title $e->firstChild->nodeValue;
    echo 
    "Titel: <br>";
    echo 
    $title
    echo 
    "<br>";
     echo 
    $e $e->nodeValue"<br />\n"
    Mein Problem ist dass ich die $xpath->query-Syntax noch nicht ganz kapiere. Also wie man zum Beispiel fragt: Hole mir den A-tag nach jeder class="h1".

    Gruß
    newbie1955
    P.S. Hier noch mal der auszulesende Quelltext:
    HTML-Code:
    <div class="bd">
            <div class="hl">
                                        <a href="http://www.testseite/...../hgv-laedt-erstmals-zum-neujahrsempfang-nach-lengede-ein-id843449.html" title="HGV lädt 
    erstmals zum 
    Neujahrsempfang 
    nach Lengede ein" >HGV lädt  erstmals zum  Neujahrsempfang  nach Lengede ein</a>
                                            </div><div class="txt">
                                            <span class="loc">Lengede</span>
    <a href="http://www.testseite.de/...../hgv-laedt-erstmals-zum-neujahrsempfang-nach-lengede-ein-id843449.html" title="HGV lädt 
    erstmals zum 
    Neujahrsempfang 
    nach Lengede ein" >Der Handels- und Gewerbeverein (HGV) Lengede will am 6. Januar „alle“ Gewerbetreibenden der Gemeinde für einen...</a>
                                        </div></div>
                        </div>
    Hier wird auf meiner Seite dann der Wert von "title" aus der class "txt" ausgegeben. Ich will aber, wie gesagt, den title und href des a-tags nach "h1"
    Zuletzt geändert von newbie1955; 28.12.2012, 20:36.

    Kommentar


    • #17
      Zitat von newbie1955 Beitrag anzeigen
      Mein Problem ist dass ich die $xpath->query-Syntax noch nicht ganz kapiere. Also wie man zum Beispiel fragt: Hole mir den A-tag nach jeder class="h1".
      ungetestet:
      PHP-Code:
      $xPath->query('//div[@class="h1"]//a'
      Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
      Schön - etwas Geschichte kann ja nicht schaden.
      Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

      Kommentar


      • #18
        Leider

        Zitat von Quetschi Beitrag anzeigen
        ungetestet:
        PHP-Code:
        $xPath->query('//div[@class="h1"]//a'
        Danke für den Versuch, hat aber leider kein Ergebnis gebracht. Weder wenn ich den nodeValue auszugeben versuche noch wenn ich mir mit
        PHP-Code:
        getAttribute('href'); 
        oder title zu holen versuche.

        Wenn ich dasselbe mit class="bd" statt mit "h1" versuche bringt es auch nur wieder das bekannte bd-Ergebnis. Bedeutet denn "//" nächste "Verwandschaftsebene"?

        Gruß newbie1955

        Kommentar


        • #19
          PHP-Code:
          "h1" != "hl" 
          Zitat von newbie1955 Beitrag anzeigen
          Bedeutet denn "//" nächste "Verwandschaftsebene"?
          PHP-Code:
          <div class="bd">
              <div class="hl">
                  <p>
                      <a href="http://www.testseite/Link1.html" title="Titel von Link1">Link1</a>
                  </p>
                  <a href="http://www.testseite/Link2.html" title="Titel von Link2">Link2</a>
              </div>
          </div>
          <?php

          //Finde alle a-Tags, die direkter Nachfahre von div-Tag mit der Klasse 'hl' sind
          $xPath->query('//div[@class="h1"]/a');

          //Finde alle a-Tags, unterhalb von div-Tag mit der Klasse 'hl' - egal wie tief verschachtelt
          $xPath->query('//div[@class="h1"]//a');


          ?>
          Für alles weitere zur Formulierung von xPath-Abfragen siehst du aber bitte nun erst einmal selbst auf der verlinkten Seite von Selfhtml nach - da wäre die Frage, die du eben gestellt hast schon beantwortet.
          Zuletzt geändert von Quetschi; 28.12.2012, 21:59.
          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
          Schön - etwas Geschichte kann ja nicht schaden.
          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

          Kommentar


          • #20
            Danke noch mal für die Erklärung, aber sorry, wieso kommt denn dann nix mit der von Dir ungetesteten und von mir getesteten Abfrage
            PHP-Code:
            $xPath->query('//div[@class="h1"]//a'); 
            , mit der ich es versucht habe. Es ist doch ein a-tag nach "h1"-Div?

            Und nochmal sorry, was bedeutet Dein Code
            PHP-Code:
            "h1" != "hl" 
            ?

            Ja, ich studiere ja selfhtml. Ich finde dort sind viele Angaben zur Konstruktion aber wenig Beispiele, wie konkrete XPath-Abfragen konstruiert werden, also schon mal so banale Sachen wie, wann man Eckige Klammern verwendet, wann runde. Also ich kapiere schon z. B. dass in meinem Fall div "bd" ein parent von div "h1" sein müsste, aber so etwas konkrete Fallbeispiele wie "Wenn Sie das abfragen wollen, machen Sie es z. B. so..."
            So etwas findet man dann in Einzelfällen mal bei stackoverflow oder so und muss dann Rückschlüsse ziehen.

            Gruß newbie1955
            Was heißt
            Drelingdo usw - ist das Deine Sprache-Erfindung?
            Zuletzt geändert von newbie1955; 28.12.2012, 22:23.

            Kommentar


            • #21
              Zitat von newbie1955 Beitrag anzeigen
              Und nochmal sorry, was bedeutet Dein Code
              PHP-Code:
              "h1" != "hl" 
              ?
              Das bedeutet, dass h1 und hl nicht dasselbe sind und du deshalb vergeblich nach der Klasse [klein H]+[Ziffer Eins] suchst, weil das div die Klasse [klein H]+[klein L] besitzt.

              Gruß,

              Amica
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #22
                Dein Html enthält ein div-Tag mit der Klasse 'hl' - ein 'h' gefolgt vom Buchstaben 'l'.

                In der xPath-Query suchst du nach einem div-Tag mit der Klasse 'h1' - ein 'h' gefolgt von der Ziffer 1.




                Finde es bei Selfhtml eigentlich sehr schön erklärt und Beispiele finden sich dort ja auch zu genüge.

                Du bist nur auf die oft recht ähnliche Darstellung von l und 1 hereingefallen - deshalb waren deine Versuche erfolglos und die Doku wurde daher für dich als schwer nachvollziehbar empfunden.
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #23
                  (Manchmal nützt auch die beste Brille nix)

                  Zuletzt geändert von newbie1955; 28.12.2012, 22:45.

                  Kommentar


                  • #24
                    Erneutes Problem

                    ...nun lief alles bestens, heute kommt wieder kein Inhalt und die Fehlermeldung:

                    Code:
                    Warning: DOMDocument::loadHTML(): ID blaa already defined in Entity, line: 791 in
                    und
                    Code:
                    Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity, line
                    Wat is denn dat nu wieder?
                    Gruß
                    newbie1955

                    Kommentar


                    • #25
                      Das sind Fehler in Deinem HTML Code bzw dem HTML Code, den Du zu parsen versuchst. Ein id-Attribut darf nur eindeutig in einem HTML Dokument erwähnt werden. Es darf keine zwei id-Attribute mit ein und dem selben Wert geben.

                      Entitäten sind in wohl formatierten HTML ebenfalls ein großartiges Thema. Ich schätze mal, dass ein & als solches in Deinem HTML Text steht. Derartige Sonderzeichen müssen aber maskiert, sprich als Entität dargestellt werden. Dann würde es auch richtig geparst werden.

                      Die DOM Funktionen setzen wohl formatiertes HTML / XML voraus. Du kannst aber mit den Eigenschaften von DomDocument einige dieser Warnings umgehen. Schau Dir hierzu die Klassenbeschreibung von DomDocument im Manual an. Eventuel ist das hier Deine Lösung: PHP: DOMDocument - Manual
                      MM Newmedia | MeinBlog

                      Kommentar


                      • #26
                        www.php.net/domdocument.loadhtml

                        Insbesondere der Abschnitt 'Errors/Exceptions'.
                        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                        Schön - etwas Geschichte kann ja nicht schaden.
                        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                        Kommentar

                        Lädt...
                        X