simplexml_load_file und xpath

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

  • simplexml_load_file und xpath

    Hallo,

    ich versuche gerade eine Twitter XML-Datei per PHP einzulesen, scheitere aber an der Angabe für xpath.

    Ich nutze folgende Funktion:

    PHP-Code:
    function get_rss_items($url) {
       
        
    // retrieve search results
        
    if($xml simplexml_load_file($url'SimpleXMLElement'LIBXML_NOCDATA)) {
            
    $result["title"]   = $xml->xpath("/feed/entry/title");

            foreach(
    $result as $key => $attribute) {
                
    $i=0;
                foreach(
    $attribute as $element) {
                    
    $ret[$i][$key] = (string)$element;
                    
    $i++;
                }
            }   
            return 
    $ret;   
        } else
            return 
    false;   

    Wenn ich die Funktion jetzt für folgenden URL ausführe:

    Code:
    http://search.twitter.com/search.atom?q=from:ashtonfans&rpp=5
    Funktioniert es nicht, ich bekomme einfach nichts zurück. Ich habe es schon mit unterschiedlichen xpath-Angaben versucht, bekomme es aber nicht hin.
    Es liegt wohl an der Formatierung der XML Datei nehme ich an.

    Hat jemand eine Idee?

    Danke
    Gruß
    Oneside
    Luxus Magazin
    Luxus Shops

  • #2
    Der Ausdruck sieht eigentlich korrekt aus - feed ist Wurzelelement, und entry und title sind jeweils direkte Nachfahren, ohne andere Ebenen dazwischen.

    Zum Testen solltest du das Ergebnis der XPath-Methode mal direkt mittels var_dump ausgeben lassen (und aus der Quelltext-Ansicht des Browsers kopieren).
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Nachdem ich die XML Datei simplexml_load_file in $xml geladen habe bekomme ich durch:
      Code:
      var_dump($xml);
      Diesen Code:
      PHP-Code:
      object(SimpleXMLElement)#1 (5) {
        
      ["id"]=>
        
      string(50"tag:search.twitter.com,2005:search/from:ashtonfans"
        
      ["link"]=>
        array(
      4) {
          [
      0]=>
          
      object(SimpleXMLElement)#9 (1) {
            
      ["@attributes"]=>
            array(
      3) {
              [
      "type"]=>
              
      string(9"text/html"
              
      ["rel"]=>
              
      string(9"alternate"
              
      ["href"]=>
              
      string(52"http://search.twitter.com/search?q=from%3Aashtonfans"
            
      }
          }
          [
      1]=>
          
      object(SimpleXMLElement)#8 (1) {
            
      ["@attributes"]=>
            array(
      3) {
              [
      "type"]=>
              
      string(20"application/atom+xml"
              
      ["rel"]=>
              
      string(4"self"
              
      ["href"]=>
              
      string(61"http://search.twitter.com/search.atom?q=from:ashtonfans&rpp=5"
            
      }
          }
          [
      2]=>
          
      object(SimpleXMLElement)#7 (1) {
            
      ["@attributes"]=>
            array(
      3) {
              [
      "type"]=>
              
      string(37"application/opensearchdescription+xml"
              
      ["rel"]=>
              
      string(6"search"
              
      ["href"]=>
              
      string(40"http://search.twitter.com/opensearch.xml"
            
      }
          }
          [
      3]=>
          
      object(SimpleXMLElement)#6 (1) {
            
      ["@attributes"]=>
            array(
      3) {
              [
      "type"]=>
              
      string(20"application/atom+xml"
              
      ["rel"]=>
              
      string(7"refresh"
              
      ["href"]=>
              
      string(83"http://search.twitter.com/search.atom?q=from%3Aashtonfans&rpp=5&since_id=1807292034"
            
      }
          }
        }
        [
      "title"]=>
        
      string(32"from:ashtonfans - Twitter Search"
        
      ["updated"]=>
        
      string(20"2009-05-05T18:36:45Z"
        
      ["entry"]=>
        array(
      4) {
          [
      0]=>
          
      object(SimpleXMLElement)#5 (7) {
            
      ["id"]=>
            
      string(38"tag:search.twitter.com,2005:1708640515"
            
      ["published"]=>
            
      string(20"2009-05-05T18:36:45Z"
            
      ["link"]=>
            array(
      2) {
              [
      0]=>
              
      object(SimpleXMLElement)#10 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"text/html"
                  
      ["rel"]=>
                  
      string(9"alternate"
                  
      ["href"]=>
                  
      string(49"http://twitter.com/ashtonfans/statuses/1708640515"
                
      }
              }
              [
      1]=>
              
      object(SimpleXMLElement)#11 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"image/png"
                  
      ["rel"]=>
                  
      string(5"image"
                  
      ["href"]=>
                  
      string(95"http://s3.amazonaws.com/twitter_production/profile_images/192332891/Picture_4_bigger_normal.png"
                
      }
              }
            }
            [
      "title"]=>
            
      string(118"“I want to be like Tom Cruise from The Outsiders and go on and do amazing movies for a long time.” ~Ashton Kutcher"
            
      ["content"]=>
            
      string(118"“I want to be like Tom Cruise from The Outsiders and go on and do amazing movies for a long time.” ~Ashton Kutcher"
            
      ["updated"]=>
            
      string(20"2009-05-05T18:36:45Z"
            
      ["author"]=>
            
      object(SimpleXMLElement)#12 (2) {
              
      ["name"]=>
              
      string(27"ashtonfans (ashton kutcher)"
              
      ["uri"]=>
              
      string(29"http://twitter.com/ashtonfans"
            
      }
          }
          [
      1]=>
          
      object(SimpleXMLElement)#4 (7) {
            
      ["id"]=>
            
      string(38"tag:search.twitter.com,2005:1708445493"
            
      ["published"]=>
            
      string(20"2009-05-05T18:14:45Z"
            
      ["link"]=>
            array(
      2) {
              [
      0]=>
              
      object(SimpleXMLElement)#13 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"text/html"
                  
      ["rel"]=>
                  
      string(9"alternate"
                  
      ["href"]=>
                  
      string(49"http://twitter.com/ashtonfans/statuses/1708445493"
                
      }
              }
              [
      1]=>
              
      object(SimpleXMLElement)#14 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"image/png"
                  
      ["rel"]=>
                  
      string(5"image"
                  
      ["href"]=>
                  
      string(95"http://s3.amazonaws.com/twitter_production/profile_images/192332891/Picture_4_bigger_normal.png"
                
      }
              }
            }
            [
      "title"]=>
            
      string(104"“I think good things come to those who want something so bad they can't sit still.” ~ Ashton Kutcher"
            
      ["content"]=>
            
      string(104"“I think good things come to those who want something so bad they can't sit still.” ~ Ashton Kutcher"
            
      ["updated"]=>
            
      string(20"2009-05-05T18:14:45Z"
            
      ["author"]=>
            
      object(SimpleXMLElement)#15 (2) {
              
      ["name"]=>
              
      string(27"ashtonfans (ashton kutcher)"
              
      ["uri"]=>
              
      string(29"http://twitter.com/ashtonfans"
            
      }
          }
          [
      2]=>
          
      object(SimpleXMLElement)#3 (7) {
            
      ["id"]=>
            
      string(38"tag:search.twitter.com,2005:1680748716"
            
      ["published"]=>
            
      string(20"2009-05-02T19:24:21Z"
            
      ["link"]=>
            array(
      2) {
              [
      0]=>
              
      object(SimpleXMLElement)#16 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"text/html"
                  
      ["rel"]=>
                  
      string(9"alternate"
                  
      ["href"]=>
                  
      string(49"http://twitter.com/ashtonfans/statuses/1680748716"
                
      }
              }
              [
      1]=>
              
      object(SimpleXMLElement)#17 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"image/png"
                  
      ["rel"]=>
                  
      string(5"image"
                  
      ["href"]=>
                  
      string(95"http://s3.amazonaws.com/twitter_production/profile_images/192332891/Picture_4_bigger_normal.png"
                
      }
              }
            }
            [
      "title"]=>
            
      string(132""Men think highly of those who rise rapidly in the worldwhereas nothing rises quicker than duststraw, and feathers." _Lord Byron"
            
      ["content"]=>
            
      string(142""Men think highly of those who rise rapidly in the world; whereas nothing rises quicker than dust, straw, and feathers." _Lord Byron"
            
      ["updated"]=>
            
      string(20"2009-05-02T19:24:21Z"
            
      ["author"]=>
            
      object(SimpleXMLElement)#18 (2) {
              
      ["name"]=>
              
      string(27"ashtonfans (ashton kutcher)"
              
      ["uri"]=>
              
      string(29"http://twitter.com/ashtonfans"
            
      }
          }
          [
      3]=>
          
      object(SimpleXMLElement)#2 (7) {
            
      ["id"]=>
            
      string(38"tag:search.twitter.com,2005:1677523969"
            
      ["published"]=>
            
      string(20"2009-05-02T09:32:21Z"
            
      ["link"]=>
            array(
      2) {
              [
      0]=>
              
      object(SimpleXMLElement)#19 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"text/html"
                  
      ["rel"]=>
                  
      string(9"alternate"
                  
      ["href"]=>
                  
      string(49"http://twitter.com/ashtonfans/statuses/1677523969"
                
      }
              }
              [
      1]=>
              
      object(SimpleXMLElement)#20 (1) {
                
      ["@attributes"]=>
                array(
      3) {
                  [
      "type"]=>
                  
      string(9"image/png"
                  
      ["rel"]=>
                  
      string(5"image"
                  
      ["href"]=>
                  
      string(95"http://s3.amazonaws.com/twitter_production/profile_images/192332891/Picture_4_bigger_normal.png"
                
      }
              }
            }
            [
      "title"]=>
            
      string(99"“Small minds discuss people. Average minds discuss events. Great minds discuss ideas.” -unknown"
            
      ["content"]=>
            
      string(99"“Small minds discuss people. Average minds discuss events. Great minds discuss ideas.” -unknown"
            
      ["updated"]=>
            
      string(20"2009-05-02T09:32:21Z"
            
      ["author"]=>
            
      object(SimpleXMLElement)#21 (2) {
              
      ["name"]=>
              
      string(27"ashtonfans (ashton kutcher)"
              
      ["uri"]=>
              
      string(29"http://twitter.com/ashtonfans"
            
      }
          }
        }

      Luxus Magazin
      Luxus Shops

      Kommentar


      • #4
        Hi,

        Du musst ein Prefix für den Default Namespace registrieren:

        PHP-Code:
        if($xml simplexml_load_file($url'SimpleXMLElement'LIBXML_NOCDATA)) {
              
        $xml->registerXPathNamespace('d''http://www.w3.org/2005/Atom'); 
        und dann im XPath-Ausdruck verwenden:

        PHP-Code:
        $result["title"]   = $xml->xpath("/d:feed/d:entry/d:title"); 
        LG

        Kommentar


        • #5
          Ja super, funktioniert
          Wusste nicht, dass das nötig ist.

          Luxus Magazin
          Luxus Shops

          Kommentar

          Lädt...
          X