xpath-Abfrage wirkt nicht

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

  • xpath-Abfrage wirkt nicht

    Hallo, habe mal wieder eine Frage zum xpath-Gebrauch. Ich suche mit Xpath href und title auf folgender Seite (QUelltext):
    Code:
    [COLOR=#0000ff]<[/COLOR][COLOR=#800000]div [/COLOR][COLOR=#ff0000]class[/COLOR][COLOR=#0000ff]="mitte_folgeseiten">[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]ul[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]img[/COLOR][COLOR=#ff0000]src[/COLOR][COLOR=#0000ff]="/sronline/images/element_mitte_archiv_thispage.gif" [/COLOR][COLOR=#ff0000]height[/COLOR][COLOR=#0000ff]="9" [/COLOR][COLOR=#ff0000]width[/COLOR][COLOR=#0000ff]="22" [/COLOR][COLOR=#ff0000]alt[/COLOR][COLOR=#0000ff]="Link" />[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#ff0000]href[/COLOR][COLOR=#0000ff]="/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-1.html">[/COLOR][COLOR=#008000]<!--27.04.2013 2000-->[/COLOR]Berlin: Grüne ziehen mit Steuerrefom in Wahlkampf[COLOR=#0000ff]</[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]img[/COLOR][COLOR=#ff0000]src[/COLOR][COLOR=#0000ff]="/sronline/images/element_mitte_link_intern.gif" [/COLOR][COLOR=#ff0000]height[/COLOR][COLOR=#0000ff]="9" [/COLOR][COLOR=#ff0000]width[/COLOR][COLOR=#0000ff]="22" [/COLOR][COLOR=#ff0000]alt[/COLOR][COLOR=#0000ff]="Link" />[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#ff0000]href[/COLOR][COLOR=#0000ff]="/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-2.html">[/COLOR][COLOR=#008000]<!--27.04.2013 2000-->[/COLOR]Rom: Neue italienische Regierung steht[COLOR=#0000ff]</[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]img[/COLOR][COLOR=#ff0000]src[/COLOR][COLOR=#0000ff]="/sronline/images/element_mitte_link_intern.gif" [/COLOR][COLOR=#ff0000]height[/COLOR][COLOR=#0000ff]="9" [/COLOR][COLOR=#ff0000]width[/COLOR][COLOR=#0000ff]="22" [/COLOR][COLOR=#ff0000]alt[/COLOR][COLOR=#0000ff]="Link" />[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#ff0000]href[/COLOR][COLOR=#0000ff]="/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-3.html">[/COLOR][COLOR=#008000]<!--27.04.2013 2001-->[/COLOR]Berlin: Berichte über Nebentätigkeiten von Soldaten und Polizisten[COLOR=#0000ff]</[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]img[/COLOR][COLOR=#ff0000]src[/COLOR][COLOR=#0000ff]="/sronline/images/element_mitte_link_intern.gif" [/COLOR][COLOR=#ff0000]height[/COLOR][COLOR=#0000ff]="9" [/COLOR][COLOR=#ff0000]width[/COLOR][COLOR=#0000ff]="22" [/COLOR][COLOR=#ff0000]alt[/COLOR][COLOR=#0000ff]="Link" />[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#ff0000]href[/COLOR][COLOR=#0000ff]="/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-4.html">[/COLOR][COLOR=#008000]<!--27.04.2013 2001-->[/COLOR]Washington : Neue Verhaftung im Giftbriefe-Fall[COLOR=#0000ff]</[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]img[/COLOR][COLOR=#ff0000]src[/COLOR][COLOR=#0000ff]="/sronline/images/element_mitte_link_intern.gif" [/COLOR][COLOR=#ff0000]height[/COLOR][COLOR=#0000ff]="9" [/COLOR][COLOR=#ff0000]width[/COLOR][COLOR=#0000ff]="22" [/COLOR][COLOR=#ff0000]alt[/COLOR][COLOR=#0000ff]="Link" />[/COLOR][COLOR=#0000ff]<[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#ff0000]href[/COLOR][COLOR=#0000ff]="/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100~_seite-5.html">[/COLOR][COLOR=#008000]<!--27.04.2013 2002-->[/COLOR]Fußball: Hoffenheim und Augsburg mit Siegen[COLOR=#0000ff]</[/COLOR][COLOR=#800000]a[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]li[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]ul[/COLOR][COLOR=#0000ff]>[/COLOR][COLOR=#0000ff]</[/COLOR][COLOR=#800000]div[/COLOR][COLOR=#0000ff]>[/COLOR]
    Habe es so versucht:

    PHP-Code:
    <?php
    /*error_reporting( -1 );
    ini_set('display_errors', TRUE);
    */
    $data file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html');
    $zaehler 0;
     
    $doc = new DOMDocument(); 
    $doc->loadHTML($data); 
     
    $xPath = new DOMXPath($doc);
     
    foreach (
    $xPath->query('//div[@class="mitte_folgeseiten"]/a') as $element) {
    if (
    $zaehler <= 13)
    {
    $hreft $element->getAttribute('href');
    $title $element->getAttribute('title');
     
    $href "http://www.testseite.de/" $hreft
             echo 
    "<li><a href=$href target='_blank'>" 
                       
    $title '</a></li>';
    $zaehler++;
    }
    }
    ?>
    Klappt aber nicht, habt Ihr einen Tipp?

    Gruß und Dank newbie1955
    Zuletzt geändert von newbie1955; 27.04.2013, 20:24.

  • #2
    Der HTML-Code ist Kaputt. Es müsste <a href=""> heißen und nicht <ahref="">.

    Kommentar


    • #3
      Wirklich?

      Also, wenn ich mir den Quelltext auf der Seite anzeigen lassen, sehe ich einen Leerraum zwische a und href, wenn ich es hierher kopiere nicht.

      Kommentar


      • #4
        Bei mir funktioniert es, wenn ich die Reihenfolge von Knoten und Kindern einhalte /ul/li/a und berücksichtige, dass der Linktitel nicht als Attribut enthalten ist, getAttribute('title') deshalb leer bleibt, sondern nur als Inhalt von Node.

        PHP-Code:
        <?php
        error_reporting
        ( -);
        ini_set('display_errors'true);
        libxml_use_internal_errors(true);

        $data file_get_contents('http://www.sr-online.de/sronline/nachrichten/hoerfunknachrichten/hoerfunknachrichten_aktuell100.html');

        $zaehler 0;

        $doc = new DOMDocument();
        $doc->loadHTML($data);

        $xPath = new DOMXPath($doc);

        foreach (
        $xPath->query("//div[@class=\"mitte_folgeseiten\"]/ul/li/a") as $element) {

            if (
        $zaehler <= 13)
            {
                
        $hreft $element->getAttribute("href");
                
        $title $element->nodeValue;
                
        $href  "http://www.testseite.de".$hreft;

                echo 
        "<li><a href=\"".htmlspecialchars($hreftENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($titleENT_QUOTES)."</a></li>";
                
        $zaehler++;
            }
        }
        ?>

        Kommentar


        • #5
          Dankedankedanke

          Vielen Dank, ich musste bei mir aus unerfindlichen Gründen wieder ein utf8_decode einschieben, aber dann klappte es! Die ul/li-Angaben hatte ich komplett übersehen, oha! Super

          Gruß newbie1955

          Kommentar


          • #6
            Zitat von newbie1955 Beitrag anzeigen
            Vielen Dank, ich musste bei mir aus unerfindlichen Gründen wieder ein utf8_decode einschieben, aber dann klappte es! Die ul/li-Angaben hatte ich komplett übersehen, oha! Super

            Gruß newbie1955
            Hallo,

            wenn du bei deinem DIV einsteigst und irgendwo dort in der Hierarchie zu einem a Tag willst, musst du natürlich auch den Hierarchie Pfad bis dahin angeben, wie soll denn das a Tag sonst gefunden werden?

            Desweiteren kann ich dir noch empfehlen PHP: Tidy - Manual zu nutzen, dass bereinigt dir den Großteil von kaputten HTML. Auf doppelte ID Vergaben im HTML kann leider auch tidy nicht reagieren, da gibts dann spätesten von DOM ne PHP Fehlermeldung das da was nicht stimmt.
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              @ litterauspirn,

              da steht aber bei jeder zweiten Funktion, dass die nur von der Zend Engine unterstützt wird. Zumindest bei tidy::html, tidy::head und tidy::body sah ich gerade diesen Hinweis:

              Hinweis: Diese Funktion wird nur von der Zend Engine 2 (PHP >= 5.0.0) unterstützt.
              PHP: tidy::html - Manual

              Edit: Und wenn da nichts steht, wie bei parseString, ich aber das Beispiel von der Seite mit tidy_parse_string verwende, so erhalte ich dennoch zur Antwort:

              Fatal error: Call to undefined function tidy_parse_string()
              Zuletzt geändert von Melewo; 29.04.2013, 11:23.

              Kommentar


              • #8
                @Melewo

                Jetzt liest du schon im Manual - warum dann nicht auch die entsprechenden Abschnitte bzgl. Anforderungen/Installation?

                PHP: Installation/Konfiguration - Manual
                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


                • #9
                  @Quetschi,

                  weil es nicht weiter interessierte, newbie1955 könnte es aber mal testen.

                  Kommentar

                  Lädt...
                  X